Come posso automatizzare la configurazione del proxy HTTP per i nodi containerd di Amazon EKS?
Desidero automatizzare la configurazione del proxy HTTP per i nodi di Amazon Elastic Kubernetes Service (Amazon EKS) con il runtime containerd.
Breve descrizione
Per i gruppi di nodi gestiti che hai creato nelle versioni 1.23 o precedenti di Amazon EKS, il runtime del container predefinito è Docker. Se questo è il tuo caso d'uso, segui tutti i passaggi della risoluzione per specificare un runtime containerd. Per i gruppi di nodi gestiti creati nella versione 1.24 o successiva di Amazon EKS, il runtime predefinito del container è containerd.
Per utilizzare containerd anziché dockerd nel tuo gruppo di nodi gestito, devi specificare un runtime containerd in userdata.
Dopo aver cambiato il gruppo di nodi gestito in un runtime containerd, crea un modello di avvio personalizzato con il tuo ID Amazon Machine Image (AMI). Puoi quindi configurare le impostazioni per il proxy HTTP e i valori di ambiente del cluster.
Nota: Per i nodi con runtime Docker, consultare Come automatizzare la configurazione del proxy HTTP per i nodi worker di Amazon EKS con Docker?
Risoluzione
Creazione di un modello di avvio personalizzato
Per specificare containerd come runtime e creare un modello di avvio personalizzato, completa i seguenti passaggi:
-
Specifica containerd come runtime nel gruppo di nodi gestito. In userdata, usa l'opzione --container-runtime=containerd per bootstrap.sh.
-
Crea un modello di avvio personalizzato con l'ID AMI. Se non lo fai, il gruppo di nodi gestiti unisce automaticamente userdata.
-
Imposta la configurazione del proxy su containerd, sandbox-image e kubelet.
Nota: Sandbox-image è l'unità di servizio che recupera l'immagine dell'ambiente di sperimentazione per containerd. -
Descrivi i tuoi userdata con i seguenti campi:
MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==BOUNDARY==" --==BOUNDARY== Content-Type: text/cloud-boothook; charset="us-ascii" #Set the proxy hostname and port PROXY=XXXXXXX:3128 TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` MAC=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -v -s http://169.254.169.254/latest/meta-data/mac/) VPC_CIDR=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -v -s http://169.254.169.254/latest/meta-data/network/interfaces/macs/$MAC/vpc-ipv4-cidr-blocks | xargs | tr ' ' ',') #Create the containerd and sandbox-image systemd directory mkdir -p /etc/systemd/system/containerd.service.d mkdir -p /etc/systemd/system/sandbox-image.service.d #[Option] Configure yum to use the proxy cloud-init-per instance yum_proxy_config cat << EOF >> /etc/yum.conf proxy=http://$PROXY EOF #Set the proxy for future processes, and use as an include file cloud-init-per instance proxy_config cat << EOF >> /etc/environment http_proxy=http://$PROXY https_proxy=http://$PROXY HTTP_PROXY=http://$PROXY HTTPS_PROXY=http://$PROXY no_proxy=$VPC_CIDR,localhost,127.0.0.1,169.254.169.254,.internal,.eks.amazonaws.com NO_PROXY=$VPC_CIDR,localhost,127.0.0.1,169.254.169.254,.internal,.eks.amazonaws.com EOF #Configure Containerd with the proxy cloud-init-per instance containerd_proxy_config tee <<EOF /etc/systemd/system/containerd.service.d/http-proxy.conf >/dev/null [Service] EnvironmentFile=/etc/environment EOF #Configure sandbox-image with the proxy cloud-init-per instance sandbox-image_proxy_config tee <<EOF /etc/systemd/system/sandbox-image.service.d/http-proxy.conf >/dev/null [Service] EnvironmentFile=/etc/environment EOF #Configure the kubelet with the proxy cloud-init-per instance kubelet_proxy_config tee <<EOF /etc/systemd/system/kubelet.service.d/proxy.conf >/dev/null [Service] EnvironmentFile=/etc/environment EOF cloud-init-per instance reload_daemon systemctl daemon-reload --==BOUNDARY== Content-Type:text/x-shellscript; charset="us-ascii" #!/bin/bash set -o xtrace #Set the proxy variables before running the bootstrap.sh script set -a source /etc/environment #Run the bootstrap.sh script B64_CLUSTER_CA=YOUR_CLUSTER_CA API_SERVER_URL=API_SERVER_ENDPOINT /etc/eks/bootstrap.sh EKS_CLUSTER_NAME --b64-cluster-ca $B64_CLUSTER_CA --apiserver-endpoint $API_SERVER_URL --container-runtime containerd --==BOUNDARY==--
Nota: sostituisci XXXXXXX:3128, YOUR_CLUSTER_CA, API_SERVER_ENDPOINT e EKS_CLUSTER_NAME con il proxy, l'Autorità di Certificazione (CA) del cluster, l'endpoint del server e il nome del cluster. Dopo aver creato gli endpoint del cloud privato virtuale (VPC), aggiungi gli endpoint del servizio AWS a NO\ _PROXY e no\ _proxy.
Configurazione dell'impostazione del proxy per aws-node e kube-proxy
Nota: se instradi il traffico dal cluster a Internet tramite un proxy HTTP e il tuo endpoint EKS è pubblico, devi completare questi passaggi. Se hai una configurazione diversa, questi passaggi sono opzionali.
Crea una ConfigMap per configurare i valori dell'ambiente. Quindi, applica ConfigMap nel tuo cluster. Usa lo script seguente come esempio per la tua ConfigMap:
apiVersion: v1 kind: ConfigMap metadata: name: proxy-environment-variables namespace: kube-system data: HTTP_PROXY: http://XXXXXXX:3128 HTTPS_PROXY: http://XXXXXXX:3128 NO_PROXY: KUBERNETES_SERVICE_CIDR_RANGE,localhost,127.0.0.1,VPC_CIDR_RANGE,169.254.169.254,.internal
Nota: sostituisci KUBERNETES_SERVICE_CIDR_RANGE e VPC_CIDR_RANGE con i valori per i tuoi intervalli CIDR. Dopo aver creato gli endpoint VPC, aggiungi gli endpoint del servizio AWS a NO\ _PROXY e no_proxy.
Quindi, imposta la configurazione del proxy HTTP su aws-node e kube-proxy:
$ kubectl patch -n kube-system -p '{ "spec": {"template":{ "spec": { "containers": [ { "name": "aws-node", "envFrom": [ { "configMapRef": {"name": "proxy-environment-variables"} } ] } ] } } } }' daemonset aws-node $ kubectl patch -n kube-system -p '{ "spec": {"template":{ "spec": { "containers": [ { "name": "kube-proxy", "envFrom": [ { "configMapRef": {"name": "proxy-environment-variables"} } ] } ] } } } }' daemonset kube-proxy
Creazione di un gruppo di nodi gestito
Crea un nuovo gruppo di nodi gestito che utilizzi il modello di avvio personalizzato creato in precedenza.
Test del proxy
Per verificare lo stato dei tuoi nodi, esegui i seguenti comandi:
$ kubectl get nodes $ kubectl run test-pod --image=amazonlinux:2 --restart=Never -- sleep 300 $ kubectl get pods -A
Riceverai un output simile al seguente esempio:
$ kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME ip-192-168-100-114.ap-northeast-1.compute.internal Ready <none> 2m27s v1.23.13-eks-fb459a0 192.168.100.114 <none> Amazon Linux 2 5.4.219-126.411.amzn2.x86_64 containerd://1.6.6 $ kubectl run test-pod --image=amazonlinux:2 --restart=Never -- sleep 300 pod/test-pod created $ kubectl get pods -A NAMESPACE NAME READY STATUS RESTARTS AGE default test-pod 1/1 Running 0 14s kube-system aws-node-cpjcl 1/1 Running 0 3m34s kube-system coredns-69cfddc4b4-c7rpd 1/1 Running 0 26m kube-system coredns-69cfddc4b4-z5jxq 1/1 Running 0 26m kube-system kube-proxy-g2f4g 1/1 Running 0 3m34s
Controlla il log del proxy per ulteriori informazioni sulla connettività dei tuoi nodi:
192.168.100.114 TCP_TUNNEL/200 6230 CONNECT registry-1.docker.io:443 - HIER_DIRECT/XX.XX.XX.XX - 192.168.100.114 TCP_TUNNEL/200 10359 CONNECT auth.docker.io:443 - HIER_DIRECT/XX.XX.XX.XX - 192.168.100.114 TCP_TUNNEL/200 6633 CONNECT registry-1.docker.io:443 - HIER_DIRECT/XX.XX.XX.XX - 192.168.100.114 TCP_TUNNEL/200 10353 CONNECT auth.docker.io:443 - HIER_DIRECT/XX.XX.XX.XX - 192.168.100.114 TCP_TUNNEL/200 8767 CONNECT registry-1.docker.io:443 - HIER_DIRECT/XX.XX.XX.XX -
Informazioni correlate
Come posso fornire l'accesso ad altri utenti e ruoli IAM dopo aver creato il cluster in Amazon EKS?
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 9 mesi fa