Vista geral
Este documento mostra como implementar um DaemonSet privilegiado em cada nó do Google Distributed Cloud para modificar os parâmetros do kubelet de modo a ativar as portas só de leitura. Na versão 1.16 e posteriores, a porta só de leitura do kubelet está desativada por predefinição.
Pré-requisito
Certifique-se de que o Google Distributed Cloud está em bom estado antes de executar o seguinte script de patch. Pode usar esta solução para aplicar patches a clusters de administrador e clusters de utilizadores 1.16 e posteriores.
Crie um ficheiro DaemonSet
Crie e guarde um ficheiro DaemonSet denominado patch.yaml no diretório atual, com o seguinte conteúdo:
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"
Atualize o número da porta só de leitura
Para alterar o número da porta, edite manualmente a variável de ambiente
KUBELET_READONLY_PORT
no YAML do DaemonSet.A porta só de leitura predefinida é
10255
. Não deve escolher10250
, uma vez que entra em conflito com a porta segura predefinida.
Aplique patches ao cluster de administrador
kubectl apply -f patch.yaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Aplique uma correção ao cluster de utilizadores
kubectl apply -f patch.yaml \ --kubeconfig USER_CLUSTER_KUBECONFIG
Restaurar
Para desativar a porta só de leitura, edite manualmente a variável de ambiente
KUBELET_READONLY_PORT
no YAML do DaemonSet.Depois de guardar as alterações, o DaemonSet é executado novamente para modificar o kubelet em conformidade.
Advertências
Este patch tem o mesmo ciclo de vida que as suas apps de terceiros instaladas. Pode executá-lo em qualquer altura como uma operação do dia 2. No entanto, pode não persistir depois de recriar o cluster. Para tornar esta alteração persistente, implemente este DaemonSet como um passo na ação de pós-inicialização do Google Distributed Cloud.
Após a execução única, o ficheiro de configuração do kubelet deve ser modificado e recarregado. Pode executar
kubectl delete -f patch.yaml
com segurança para limpar os recursos DaemonSet.O Google Distributed Cloud em execução no Windows não suporta esta correção.
O Kubernetes não realiza verificações de autenticação nem de autorização nesta porta não segura
10255
. A ativação desta opção deixa os dados do kubelet desprotegidos e expostos a utilizadores não autorizados. O kubelet serve o mesmo ponto final na porta10250
autenticada e mais segura. Considere migrar para essa porta segura.