개요
이 문서에서는 Google Distributed Cloud의 각 노드에 권한이 있는 DaemonSet를 배포하여 읽기 전용 포트를 사용 설정하도록 kubelet 매개변수를 수정하는 방법을 설명합니다. 버전 1.16 이상에서는 kubelet 읽기 전용 포트가 기본적으로 사용 중지됩니다.
기본 요건
다음 패치 스크립트를 실행하기 전에 Google Distributed Cloud가 정상인지 확인합니다. 이 솔루션을 사용하여 1.16 이상인 관리자 클러스터 및 사용자 클러스터를 패치할 수 있습니다.
DaemonSet 파일 만들기
다음 콘텐츠로 현재 디렉터리에 patch.yaml이라는 DaemonSet 파일을 만들고 저장합니다.
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"
읽기 전용 포트 번호 업데이트
포트 번호를 변경하려면 DaemonSet YAML에서 환경 변수
KUBELET_READONLY_PORT
를 수동으로 수정합니다.기본 읽기 전용 포트는
10255
입니다.10250
은 사전 정의된 보안 포트와 충돌하므로 선택하지 마세요.
관리자 클러스터 패치
kubectl apply -f patch.yaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
사용자 클러스터 패치
kubectl apply -f patch.yaml \ --kubeconfig USER_CLUSTER_KUBECONFIG
복원
읽기 전용 포트를 사용 중지하려면 DaemonSet YAML에서 환경 변수
KUBELET_READONLY_PORT
를 수동으로 수정하세요.변경사항을 저장하면 DaemonSet가 다시 실행되어 kubelet을 수정합니다.
주의사항
이 패치는 설치된 제3자 앱과 동일한 수명 주기를 갖습니다. 2일 차 작업으로 언제든지 실행할 수 있습니다. 하지만 클러스터를 다시 만든 후에는 유지되지 않을 수 있습니다. 이 변경사항을 영구적으로 유지하려면 Google Distributed Cloud 초기화 후 작업에서 이 DaemonSet를 배포합니다.
한 번 실행한 후에 Kubelet 구성 파일을 수정하고 새로고침해야 합니다.
kubectl delete -f patch.yaml
을 안전하게 실행하여 DaemonSet 리소스를 삭제할 수 있습니다.Windows에서 실행되는 Google Distributed Cloud는 이 패치를 지원하지 않습니다.
Kubernetes는 이 안전하지 않은 포트
10255
에서 인증 또는 승인 검사를 수행하지 않습니다. 사용 설정하면 kubelet 데이터는 보호되지 않으며 승인되지 않은 사용자에게 노출됩니다. kubelet은 보다 안전하고 인증된 포트10250
에서 동일한 엔드포인트를 제공합니다. 해당 보안 포트로 마이그레이션하는 것이 좋습니다.