Présentation
Ce document explique comment déployer un daemonset privilégié dans chaque nœud de GKE sur VMware pour modifier les paramètres du kubelet afin de désactiver les ports en lecture seule.
Prérequis
Assurez-vous que votre GKE sur VMware est opérationnel avant d'exécuter le script de correctif suivant. Cette solution permet d'appliquer des correctifs aux clusters d'administrateur et aux clusters d'utilisateur. Cela devrait fonctionner pour toutes les versions de GKE sur VMware.
Enregistrez le fichier YAML Daemonset suivant dans votre fichier local (par exemple, patch.yaml).
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: "0" # 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: 0/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"
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 réactiver le port en lecture seule, modifiez manuellement la variable d'environnement
KUBELET_READONLY_PORT
dans le fichier YAML 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 se peut qu'elle ne persiste plus après avoir recréé le cluster. Pour rendre cette modification persistante, déployez ce daemonset en tant qu'étape de l'action de post-initialisation de GKE sur VMware.
Une fois exécuté, le fichier de configuration du kubelet doit être modifié et actualisé. Vous pouvez exécuter
kubectl delete -f patch.yaml
en toute sécurité pour nettoyer les ressources daemonset.Anthos exécuté sous Windows n'est actuellement pas compatible avec ce correctif.
Les métriques suivantes sont perdues pour les versions 1.13 et antérieures de cluster: