Überblick
In diesem Dokument wird gezeigt, wie Sie auf jedem Knoten von Google Distributed Cloud ein privilegiertes DaemonSet bereitstellen, um die Kubelet-Parameter so zu ändern, dass schreibgeschützte Ports aktiviert werden. In Version 1.16 und höher ist der schreibgeschützte kubelet-Port standardmäßig deaktiviert.
Voraussetzungen
Prüfen Sie, ob Google Distributed Cloud fehlerfrei ist, bevor Sie das folgende Patch-Skript ausführen. Sie können diese Lösung verwenden, um Administrator- und Nutzercluster ab Version 1.16 zu patchen.
DaemonSet-Datei erstellen
Erstellen und speichern Sie eine DaemonSet-Datei namens patch.yaml mit folgendem Inhalt in Ihrem aktuellen Verzeichnis:
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"
Schreibgeschützte Portnummer aktualisieren
Bearbeiten Sie die Umgebungsvariable
KUBELET_READONLY_PORT
in der DaemonSet-YAML-Datei manuell, um die Portnummer zu ändern.Der schreibgeschützte Standardport ist
10255
. Sie sollten10250
nicht auswählen, da dies mit dem vordefinierten sicheren Port in Konflikt steht.
Administratorcluster patchen
kubectl apply -f patch.yaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Nutzercluster patchen
kubectl apply -f patch.yaml \ --kubeconfig USER_CLUSTER_KUBECONFIG
Wiederherstellen
Bearbeiten Sie die Umgebungsvariable
KUBELET_READONLY_PORT
in der DaemonSet-YAML-Datei manuell, um den schreibgeschützten Port zu deaktivieren.Nachdem Sie die Änderungen gespeichert haben, wird das DaemonSet noch einmal ausgeführt, um das Kubelet entsprechend zu ändern.
Vorsichtsmaßnahmen
Dieser Patch hat denselben Lebenszyklus wie deine installierten Drittanbieter-Apps. Sie können ihn jederzeit als Tag-2-Vorgang ausführen. Er bleibt jedoch möglicherweise nach der Neuerstellung des Clusters möglicherweise nicht bestehen. Damit diese Änderung dauerhaft bleibt, stellen Sie dieses DaemonSet als Schritt in der Google Distributed Cloud-Aktion nach der Initialisierung bereit.
Nach der einmaligen Ausführung sollte die kubelet-Konfigurationsdatei geändert und neu geladen werden. Sie können
kubectl delete -f patch.yaml
sicher ausführen, um DaemonSet-Ressourcen zu bereinigen.Google Distributed Cloud unter Windows unterstützt diesen Patch nicht.
Kubernetes führt keine Authentifizierungs- oder Autorisierungsprüfungen für diesen unsicheren Port
10255
durch. Wenn Sie sie aktivieren, sind kubelet-Daten ungeschützt und nicht autorisierten Nutzern zugänglich. Das Kubelet bedient denselben Endpunkt auf dem sichereren, authentifizierten Port10250
. Es empfiehlt sich, zu diesem sicheren Port zu migrieren.