hetzner-k3s 0.4.9 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 22358cdc272faa5e09ae2f561bf4225990a87b0461f4920439f9d5e9543fbe59
4
- data.tar.gz: fc7dc822d53cd881e01a18c509d666bdd0321ed25c636f2873bca3fa1e5e0ce9
3
+ metadata.gz: 21205ebaea746e26fa42437afe5feca2c9fb856861e6eebedd0608b023d0addf
4
+ data.tar.gz: e67f315b4b96e98fab4fc514e1a01ab88e79b701c83177e0c53863150e508d10
5
5
  SHA512:
6
- metadata.gz: 35a06d127f14f4848a6a87611292b67e0edbf6cc3fb1ae8b803214428369cfc519942702fe36c14c2537732b38fa024b5d2361f77db56ea58724446f4822537d
7
- data.tar.gz: bfc7751afa7db09a5e929b8164cdab060dfcb7b86125ae30a4804e179ba8a0550bdb07c9a181e148284e10ef7a632fe26ad81da1e278aeeab492a2899e2cdffb
6
+ metadata.gz: b2bf2e628f2326e63c10ebe076882979913f260a80c8b01b54944ef226341bf5cbe091283b168af566e6eda13ad84ad9742832284b28973ceb96ea87d75c911b
7
+ data.tar.gz: d5c21906a5eb59772d7613a821bb76a451e95e6f3b4f5b39321c1c431c27de5451c6fc890e37e8622077aab8c54669132227fbfd4622c85cc9838c5bd616c2b1
data/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM ruby:2.7.4-alpine
1
+ FROM ruby:3.1.0-alpine
2
2
 
3
3
  RUN apk update --no-cache \
4
4
  && apk add build-base git openssh-client
data/README.md CHANGED
@@ -38,7 +38,7 @@ This will install the `hetzner-k3s` executable in your PATH.
38
38
  Alternatively, if you don't want to set up a Ruby runtime but have Docker installed, you can use a container. Run the following from inside the directory where you have the config file for the cluster (described in the next section):
39
39
 
40
40
  ```bash
41
- docker run --rm -it -v ${PWD}:/cluster -v ${HOME}/.ssh:/tmp/.ssh vitobotta/hetzner-k3s:v0.4.9 create-cluster --config-file /cluster/test.yaml
41
+ docker run --rm -it -v ${PWD}:/cluster -v ${HOME}/.ssh:/tmp/.ssh vitobotta/hetzner-k3s:v0.5.0 create-cluster --config-file /cluster/test.yaml
42
42
  ```
43
43
 
44
44
  Replace `test.yaml` with the name of your config file.
@@ -70,6 +70,9 @@ worker_node_pools:
70
70
  - name: big
71
71
  instance_type: cpx31
72
72
  instance_count: 2
73
+ additional_packages:
74
+ - somepackage
75
+ enable_ipsec_encryption: true
73
76
  ```
74
77
 
75
78
  It should hopefully be self explanatory; you can run `hetzner-k3s releases` to see a list of the available releases from the most recent to the oldest available.
@@ -254,6 +257,10 @@ I recommend that you create a separate Hetzner project for each cluster, because
254
257
 
255
258
  ## changelog
256
259
 
260
+ - 0.5.0
261
+ - Allow installing additional packages when creating the servers
262
+ - Allow enabling ipsec encryption
263
+
257
264
  - 0.4.9
258
265
  - Ensure the program always exits with exit code 1 if the config file fails validation
259
266
  - Upgrade System Upgrade Controller to 0.8.1
data/bin/build.sh CHANGED
@@ -6,9 +6,9 @@ set -e
6
6
 
7
7
  IMAGE="vitobotta/hetzner-k3s"
8
8
 
9
- docker build -t ${IMAGE}:v9 \
9
+ docker build -t ${IMAGE}:v0.5.0 \
10
10
  --platform=linux/amd64 \
11
- --cache-from ${IMAGE}:v0.4.8 \
11
+ --cache-from ${IMAGE}:v0.4.9 \
12
12
  --build-arg BUILDKIT_INLINE_CACHE=1 .
13
13
 
14
- docker push vitobotta/hetzner-k3s:v0.4.9
14
+ docker push vitobotta/hetzner-k3s:v0.5.0
@@ -5,7 +5,9 @@ module Hetzner
5
5
  @cluster_name = cluster_name
6
6
  end
7
7
 
8
- def create(location:, instance_type:, instance_id:, firewall_id:, network_id:, ssh_key_id:, placement_group_id:, image:)
8
+ def create(location:, instance_type:, instance_id:, firewall_id:, network_id:, ssh_key_id:, placement_group_id:, image:, additional_packages: [])
9
+ @additional_packages = additional_packages
10
+
9
11
  puts
10
12
 
11
13
  server_name = "#{cluster_name}-#{instance_type}-#{instance_id}"
@@ -70,17 +72,20 @@ module Hetzner
70
72
 
71
73
  private
72
74
 
73
- attr_reader :hetzner_client, :cluster_name
75
+ attr_reader :hetzner_client, :cluster_name, :additional_packages
74
76
 
75
77
  def find_server(server_name)
76
- hetzner_client.get("/servers")["servers"].detect{ |network| network["name"] == server_name }
78
+ hetzner_client.get("/servers?sort=created:desc")["servers"].detect{ |network| network["name"] == server_name }
77
79
  end
78
80
 
79
81
  def user_data
82
+ packages = ["fail2ban"]
83
+ packages += additional_packages if additional_packages
84
+ packages = "'" + packages.join("', '") + "'"
85
+
80
86
  <<~EOS
81
87
  #cloud-config
82
- packages:
83
- - fail2ban
88
+ packages: [#{packages}]
84
89
  runcmd:
85
90
  - sed -i 's/[#]*PermitRootLogin yes/PermitRootLogin prohibit-password/g' /etc/ssh/sshd_config
86
91
  - sed -i 's/[#]*PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config
@@ -90,7 +95,7 @@ module Hetzner
90
95
  - rm /etc/resolv.conf
91
96
  - echo "nameserver 1.1.1.1" > /etc/resolv.conf
92
97
  - echo "nameserver 1.0.0.1" >> /etc/resolv.conf
93
- EOS
98
+ EOS
94
99
  end
95
100
 
96
101
  end
@@ -95,6 +95,7 @@ module Hetzner
95
95
  validate_masters
96
96
  validate_worker_node_pools
97
97
  validate_verify_host_key
98
+ validate_additional_packages
98
99
  when :delete
99
100
  validate_kubeconfig_path_must_exist
100
101
  when :upgrade
@@ -358,6 +359,11 @@ module Hetzner
358
359
  end
359
360
  end
360
361
 
362
+ def validate_additional_packages
363
+ additional_packages = configuration.dig("additional_packages")
364
+ errors << "Invalid additional packages configuration - it should be an array" if additional_packages && !additional_packages.is_a?(Array)
365
+ end
366
+
361
367
  end
362
368
  end
363
369
  end
@@ -38,6 +38,7 @@ class Cluster
38
38
  @verify_host_key = configuration.fetch("verify_host_key", false)
39
39
  @servers = []
40
40
  @networks = configuration.dig("ssh_allowed_networks")
41
+ @enable_ipsec_encryption = configuration.fetch("enable_ipsec_encryption", false)
41
42
 
42
43
  create_resources
43
44
 
@@ -80,7 +81,8 @@ class Cluster
80
81
  :masters_config, :worker_node_pools,
81
82
  :location, :public_ssh_key_path,
82
83
  :hetzner_token, :tls_sans, :new_k3s_version, :configuration,
83
- :config_file, :verify_host_key, :networks, :private_ssh_key_path, :configuration
84
+ :config_file, :verify_host_key, :networks, :private_ssh_key_path,
85
+ :configuration, :enable_ipsec_encryption
84
86
 
85
87
 
86
88
  def latest_k3s_version
@@ -123,7 +125,8 @@ class Cluster
123
125
  network_id: network_id,
124
126
  ssh_key_id: ssh_key_id,
125
127
  placement_group_id: placement_group_id,
126
- image: image
128
+ image: image,
129
+ additional_packages: additional_packages,
127
130
  }
128
131
  end
129
132
 
@@ -148,7 +151,8 @@ class Cluster
148
151
  network_id: network_id,
149
152
  ssh_key_id: ssh_key_id,
150
153
  placement_group_id: placement_group_id,
151
- image: image
154
+ image: image,
155
+ additional_packages: additional_packages,
152
156
  }
153
157
  end
154
158
  end
@@ -280,6 +284,7 @@ class Cluster
280
284
  def master_script(master)
281
285
  server = master == first_master ? " --cluster-init " : " --server https://#{first_master_private_ip}:6443 "
282
286
  flannel_interface = find_flannel_interface(master)
287
+ flannel_ipsec = enable_ipsec_encryption ? " --flannel-backend=ipsec " : " "
283
288
 
284
289
  taint = schedule_workloads_on_masters? ? " " : " --node-taint CriticalAddonsOnly=true:NoExecute "
285
290
 
@@ -294,6 +299,7 @@ class Cluster
294
299
  --node-name="$(hostname -f)" \
295
300
  --cluster-cidr=10.244.0.0/16 \
296
301
  --etcd-expose-metrics=true \
302
+ #{flannel_ipsec} \
297
303
  --kube-controller-manager-arg="address=0.0.0.0" \
298
304
  --kube-controller-manager-arg="bind-address=0.0.0.0" \
299
305
  --kube-proxy-arg="metrics-bind-address=0.0.0.0" \
@@ -441,7 +447,7 @@ class Cluster
441
447
  end
442
448
 
443
449
  def all_servers
444
- @all_servers ||= hetzner_client.get("/servers")["servers"].select{ |server| belongs_to_cluster?(server) == true }
450
+ @all_servers ||= hetzner_client.get("/servers?sort=created:desc")["servers"].select{ |server| belongs_to_cluster?(server) == true }
445
451
  end
446
452
 
447
453
  def masters
@@ -522,6 +528,10 @@ class Cluster
522
528
  configuration.dig("image") || "ubuntu-20.04"
523
529
  end
524
530
 
531
+ def additional_packages
532
+ configuration.dig("additional_packages") || []
533
+ end
534
+
525
535
  def check_kubectl
526
536
  unless which("kubectl")
527
537
  puts "Please ensure kubectl is installed and in your PATH."
@@ -1,5 +1,5 @@
1
1
  module Hetzner
2
2
  module K3s
3
- VERSION = "0.4.9"
3
+ VERSION = "0.5.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hetzner-k3s
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.9
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vito Botta