Ringkasan
Dokumen ini menunjukkan cara men-deploy DaemonSet dengan hak istimewa di setiap node Google Distributed Cloud untuk mengubah parameter kubelet guna mengaktifkan port hanya baca. Pada versi 1.16 dan yang lebih baru, port hanya baca kubelet dinonaktifkan secara default.
Prasyarat
Pastikan Google Distributed Cloud Anda dalam kondisi baik sebelum menjalankan skrip patch berikut. Anda dapat menggunakan solusi ini untuk menerapkan patch pada cluster admin dan cluster pengguna 1.16 dan yang lebih baru.
Membuat file DaemonSet
Buat dan simpan file DaemonSet bernama patch.yaml di direktori saat ini, dengan konten berikut:
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"
Memperbarui nomor port hanya baca
Untuk mengubah nomor port, edit variabel lingkungan
KUBELET_READONLY_PORT
secara manual di YAML DaemonSet.Port hanya baca default-nya adalah
10255
, Anda tidak boleh memilih10250
karena akan bertentangan dengan port aman yang telah ditentukan sebelumnya.
Menerapkan patch pada cluster admin
kubectl apply -f patch.yaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Melakukan patch pada cluster pengguna
kubectl apply -f patch.yaml \ --kubeconfig USER_CLUSTER_KUBECONFIG
Pulihkan
Untuk menonaktifkan port hanya baca, edit variabel lingkungan
KUBELET_READONLY_PORT
secara manual di YAML DaemonSet.Setelah Anda menyimpan perubahan, DaemonSet akan dijalankan ulang untuk mengubah kubelet sesuai kebutuhan.
Peringatan
Patch ini memiliki siklus proses yang sama dengan aplikasi pihak ketiga yang diinstal. Anda dapat menjalankannya kapan saja sebagai operasi hari ke-2. Namun, cluster tersebut mungkin tidak ada lagi setelah Anda membuat ulang cluster. Agar perubahan ini bersifat persisten, deploy DaemonSet ini sebagai langkah dalam tindakan pasca-inisialisasi Google Distributed Cloud.
Setelah dijalankan sekali, file konfigurasi kubelet harus diubah dan dimuat ulang. Anda dapat menjalankan
kubectl delete -f patch.yaml
dengan aman untuk membersihkan resource DaemonSet.Google Distributed Cloud yang berjalan di Windows tidak mendukung patch ini.
Kubernetes tidak melakukan pemeriksaan autentikasi atau otorisasi apa pun pada port
10255
yang tidak aman ini. Jika diaktifkan, data kubelet tidak akan dilindungi dan terekspos kepada pengguna yang tidak berwenang. Kubelet menayangkan endpoint yang sama di10250
port yang lebih aman dan diautentikasi, pertimbangkan untuk bermigrasi ke port aman tersebut.