Présentation
Ce document explique comment déployer un DaemonSet privilégié dans chaque nœud de Google Distributed Cloud pour modifier les paramètres du kubelet afin d'activer les ports en lecture seule. Dans les versions 1.16 et ultérieures, le port en lecture seule du kubelet est désactivé par défaut.
Conditions préalables
Assurez-vous que votre service Google Distributed Cloud est opérationnel avant d'exécuter le script de correctif suivant. Vous pouvez utiliser cette solution pour corriger les clusters d'administrateur et les clusters d'utilisateur de la version 1.16 et des versions ultérieures.
Créer un fichier DaemonSet
Créez et enregistrez un fichier DaemonSet nommé patch.yaml dans votre répertoire actuel, avec le contenu suivant :
apiVersion: apps/v1 kind: DaemonSet metadata: name: onprem-node-patcher namespace: kube-system spec: selector: matchLabels: name: onprem-node-patcher updateStrategy: type: RollingUpdate template: metadata: labels: name: onprem-node-patcher spec: tolerations: - operator: Exists volumes: - name: host hostPath: path: / hostPID: true initContainers: - name: read-only-patcher image: "ubuntu" env: - name: KUBELET_READONLY_PORT value: "10255" # Number of 1G hugepages. Update the value as desired. command: - /bin/bash - -c - | set -xeuo pipefail configfile="/host/var/lib/kubelet/config.yaml" kubeletservice="/host/etc/systemd/system/kubelet.service" # $1: The read-only port for the kubelet to serve on with no # authentication/authorization (set to 0 to disable) function set-readonly-port-in-config() { [[ "$#" -eq 1 ]] || return local readonlyport; readonlyport="$1" local actual; actual="$(grep readOnlyPort "${configfile}")" if [[ "${actual}" == "" ]]; then echo "readOnlyPort: ${readonlyport}" >> "${configfile}" else sed -E -i 's/readOnlyPort: [0-9]+/readOnlyPort: '"${readonlyport}"'/g' ${configfile} fi echo "Successfully append readOnlyPort: ${readonlyport} to ${configfile}" } sed -E -i 's/--read-only-port=[0-9]+/--read-only-port='"${KUBELET_READONLY_PORT}"'/g' ${kubeletservice} [[ -f ${configfile} ]] && set-readonly-port-in-config "${KUBELET_READONLY_PORT}" echo "Restarting kubelet..." chroot /host nsenter -a -t1 -- systemctl daemon-reload chroot /host nsenter -a -t1 -- systemctl restart kubelet.service echo "Success!" volumeMounts: - name: host mountPath: /host resources: requests: memory: 5Mi cpu: 5m securityContext: privileged: true containers: - image: gcr.io/google-containers/pause:3.2 name: pause # Ensures that the pods will only run on the nodes having the correct # label. nodeSelector: "kubernetes.io/os": "linux"
Mettre à jour le numéro de port en lecture seule
Pour modifier le numéro de port, modifiez manuellement la variable d'environnement
KUBELET_READONLY_PORT
dans le fichier YAML du DaemonSet.Le port en lecture seule par défaut est
10255
. Vous ne devez pas sélectionner10250
, car il entre en conflit avec le port sécurisé prédéfini.
Appliquer un correctif au cluster d'administrateur
kubectl apply -f patch.yaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Appliquer un correctif au cluster d'utilisateur
kubectl apply -f patch.yaml \ --kubeconfig USER_CLUSTER_KUBECONFIG
Restaurer
Pour désactiver le port en lecture seule, modifiez manuellement la variable d'environnement
KUBELET_READONLY_PORT
dans le fichier YAML du DaemonSet.Une fois les modifications enregistrées, le DaemonSet est réexécuté pour modifier le kubelet en conséquence.
Mises en garde
Ce correctif a le même cycle de vie que vos applications tierces installées. Vous pouvez l'exécuter à tout moment en tant qu'opération du jour 2. Toutefois, il est possible que cette valeur ne persiste pas après la recréation du cluster. Pour rendre cette modification persistante, déployez ce DaemonSet en tant qu'étape dans l'action post-initialisation de Google Distributed Cloud.
Une fois exécuté, le fichier de configuration du kubelet doit être modifié et rechargé. Vous pouvez exécuter
kubectl delete -f patch.yaml
en toute sécurité pour nettoyer les ressources DaemonSet.Google Distributed Cloud exécuté sous Windows n'est pas compatible avec ce correctif.
Kubernetes n'effectue aucun contrôle d'authentification ou d'autorisation sur ce port non sécurisé
10255
. Lorsque cette option est activée, les données du kubelet ne sont pas protégées et sont exposées à des utilisateurs non autorisés. Le kubelet diffuse le même point de terminaison sur le port authentifié et plus sécurisé10250
. Envisagez de migrer vers ce port sécurisé.