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. Di 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 versi 1.16 dan yang lebih baru.
Buat 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_PORTsecara manual di DaemonSet YAML.Port hanya baca default adalah
10255, Anda tidak boleh memilih10250karena akan berkonflik dengan port aman yang telah ditentukan sebelumnya.
Patch cluster admin
kubectl apply -f patch.yaml \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG
Membuat patch cluster pengguna
kubectl apply -f patch.yaml \
--kubeconfig USER_CLUSTER_KUBECONFIG
Pulihkan
Untuk menonaktifkan port hanya baca, edit variabel lingkungan
KUBELET_READONLY_PORTsecara manual di YAML DaemonSet.Setelah Anda menyimpan perubahan, DaemonSet akan dijalankan ulang untuk mengubah kubelet sebagaimana mestinya.
Peringatan
Patch ini memiliki siklus proses yang sama dengan aplikasi pihak ketiga yang Anda instal. Anda dapat menjalankannya kapan saja sebagai operasi hari ke-2. Namun, setelan ini mungkin tidak tetap ada setelah Anda membuat ulang cluster. Agar perubahan ini tetap ada, deploy DaemonSet ini sebagai langkah dalam tindakan pasca-inisialisasi Google Distributed Cloud.
Setelah dijalankan satu kali, file konfigurasi kubelet harus diubah dan dimuat ulang. Anda dapat menjalankan
kubectl delete -f patch.yamldengan 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 di port yang tidak aman ini
10255. Mengaktifkannya akan membuat data kubelet tidak terlindungi dan dapat diakses oleh pengguna yang tidak berwenang. Kubelet menyajikan endpoint yang sama di port10250yang lebih aman dan diautentikasi. Pertimbangkan untuk bermigrasi ke port yang aman tersebut.