You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -103,6 +110,8 @@ Let's take a deep look to the resultant **kubernetes** configuration:
103
110
* The `encryption-provider-config` provide encryption at rest. This means that the `kube-apiserver` encrypt data that is going to be stored before they reach `etcd`. So the data is completely unreadable from `etcd` (in case an attacker is able to exploit this).
104
111
* The `rotateCertificates` in `KubeletConfiguration` is set to `true` along with `serverTLSBootstrap`. This could be used in alternative to `tlsCertFile` and `tlsPrivateKeyFile` parameters. Additionally it automatically generates certificates by itself, but you need to manually approve them or at least using an operator to do this (for more details, please take a look here: <https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/>).
105
112
* If you are installing **kubernetes** in an AppArmor-based OS (eg. Debian/Ubuntu) you can enable the `AppArmor` feature gate uncommenting the lines with the comment `# AppArmor-based OS` on top.
113
+
* The `kubelet_systemd_hardening`, both with `kubelet_secure_addresses` setup a minimal firewall on the system. To better understand how these variables work, here's an explanatory image:
114
+

106
115
107
116
Once you have the file properly filled, you can run the **Ansible** command to start the installation:
**docker_plugins* - This list can be used to define [Docker plugins](https://docs.docker.com/engine/extend/) to install.
180
+
179
181
**containerd_default_runtime* - If defined, changes the default Containerd runtime used by the Kubernetes CRI plugin.
182
+
180
183
**containerd_additional_runtimes* - Sets the additional Containerd runtimes used by the Kubernetes CRI plugin.
181
184
[Default config](https://github.com/kubernetes-sigs/kubespray/blob/master/roles/container-engine/containerd/defaults/main.yml) can be overriden in inventory vars.
185
+
182
186
**http_proxy/https_proxy/no_proxy/no_proxy_exclude_workers/additional_no_proxy* - Proxy variables for deploying behind a
183
187
proxy. Note that no_proxy defaults to all internal cluster IPs and hostnames
184
188
that correspond to each node.
189
+
185
190
**kubelet_cgroup_driver* - Allows manual override of the cgroup-driver option for Kubelet.
186
191
By default autodetection is used to match container manager configuration.
187
192
`systemd` is the preferred driver for `containerd` though it can have issues with `cgroups v1` and `kata-containers` in which case you may want to change to `cgroupfs`.
193
+
188
194
**kubelet_rotate_certificates* - Auto rotate the kubelet client certificates by requesting new certificates
189
195
from the kube-apiserver when the certificate expiration approaches.
196
+
190
197
**kubelet_rotate_server_certificates* - Auto rotate the kubelet server certificates by requesting new certificates
191
198
from the kube-apiserver when the certificate expiration approaches.
192
199
**Note** that server certificates are **not** approved automatically. Approve them manually
193
200
(`kubectl get csr`, `kubectl certificate approve`) or implement custom approving controller like
**kubelet_streaming_connection_idle_timeout* - Set the maximum time a streaming connection can be idle before the connection is automatically closed.
204
+
196
205
**kubelet_make_iptables_util_chains* - If `true`, causes the kubelet ensures a set of `iptables` rules are present on host.
206
+
207
+
**kubelet_systemd_hardening* - If `true`, provides kubelet systemd service with security features for isolation.
208
+
209
+
**N.B.** To enable this feature, ensure you are using the **`cgroup v2`** on your system. Check it out with command: `sudo ls -l /sys/fs/cgroup/*.slice`. If directory does not exists, enable this with the following guide: [enable cgroup v2](https://rootlesscontaine.rs/getting-started/common/cgroup2/#enabling-cgroup-v2).
210
+
211
+
**kubelet_secure_addresses* - By default *kubelet_systemd_hardening* set the **control plane**`ansible_host` IPs as the `kubelet_secure_addresses`. In case you have multiple interfaces in your control plane nodes and the `kube-apiserver` is not bound to the default interface, you can override them with this variable.
212
+
Example:
213
+
214
+
The **control plane** node may have 2 interfaces with the following IP addresses: `eth0:10.0.0.110`, `eth1:192.168.1.110`.
215
+
216
+
By default the `kubelet_secure_addresses` is set with the `10.0.0.110` the ansible control host uses `eth0` to connect to the machine. In case you want to use `eth1` as the outgoing interface on which `kube-apiserver` connects to the `kubelet`s, you should override the variable in this way: `kubelet_secure_addresses: "192.168.1.110"`.
217
+
197
218
**node_labels* - Labels applied to nodes via kubelet --node-labels parameter.
198
219
For example, labels can be set in the inventory as variables or more widely in group_vars.
0 commit comments