hetzner-k3s 0.4.9 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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