¿Cómo puedo automatizar la configuración del proxy HTTP para los nodos de containerd de Amazon EKS?
Quiero automatizar la configuración del proxy HTTP para los nodos de Amazon Elastic Kubernetes Service (Amazon EKS) con una versión ejecutable de containerd.
Breve descripción
Para los grupos de nodos administrados creados en las versiones 1.23 o anteriores de Amazon EKS, la versión ejecutable del contenedor predeterminada es Docker. Si este es su caso, asegúrese de seguir todos los pasos de la solución para especificar una versión ejecutable de containerd. Para los grupos de nodos administrados creados en las versiones 1.24 o posteriores de Amazon EKS, la versión ejecutable del contenedor predeterminada es containerd.
Para usar containerd en su grupo de nodos administrados en lugar de dockerd, es necesario especificar una versión ejecutable de containerd en userdata.
Tras cambiar el grupo de nodos administrados a una versión ejecutable de containerd, cree una plantilla de lanzamiento personalizada con su ID de AMI. A continuación, puede configurar los ajustes del proxy HTTP y los valores del entorno del clúster.
Nota: La siguiente solución se aplica solo a los nodos en los que la versión ejecutable subyacente es containerd, no a los nodos con una versión ejecutable de Docker. Para los nodos con una versión ejecutable de Docker, consulte ¿Cómo puedo automatizar la configuración del proxy HTTP para los nodos de trabajo de EKS con datos de usuario?
Solución
Creación de una plantilla de lanzamiento personalizada
- Especifique containerd como la versión ejecutable en su grupo de nodos administrados. En userdata, utilice la opción --container-runtime=containerd para bootstrap.sh.
- Cree una plantilla de lanzamiento personalizada con el ID de la AMI. De lo contrario, el grupo de nodos administrados combinará userdata automáticamente si no se especifica el ID de la AMI.
- Establezca la configuración del proxy como containerd, sandbox-image y kubelet. Sandbox-image es la unidad de servicio que extrae la imagen de entorno aislado de containerd. Para establecer esta configuración, consulte los scripts sandbox-image.service y pull-sandbox-image.sh en GitHub.
- Ahora puede describir userdata con los siguientes campos:
Nota: Sustituya XXXXXXX:3128, YOUR_CLUSTER_CA, API_SERVER_ENDPOINT y EKS_CLUSTER_NAME por el proxy, la CA del clúster, el punto de conexión del servidor y el nombre del clúster correspondientes. Puede añadir puntos de conexión de servicio de AWS a NO_PROXY y no_proxy una vez creados sus puntos de conexión de VPC.
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==--
Configuración de los ajustes del proxy para aws-node y kube-proxy
Cree un ConfigMap para configurar los valores del entorno. A continuación, aplíquelo en su clúster. Utilice el siguiente script como ejemplo para su ConfigMap: Nota: Sustituya KUBERNETES_SERVICE_CIDR_RANGE y VPC_CIDR_RANGE por los valores pertinentes de sus rangos CIDR. Por ejemplo, sustituya KUBERNETES_SERVICE_CIDR_RANGE por 10.100.0.0/16, y VPC_CIDR_RANGE por 192.168.0.0/16. Puede añadir puntos de conexión de servicio de AWS a NO_PROXY y no_proxy una vez creados sus puntos de conexión de VPC.
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,.eks.amazonaws.com
A continuación, establezca la configuración de su proxy HTTP como aws-node y 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
Creación de un grupo de nodos administrados
Cree un nuevo grupo de nodos administrados que utilice la plantilla de lanzamiento personalizada creada anteriormente. Siga los pasos que se indican en Creación de un grupo de nodos administrados.
Prueba del proxy
Para comprobar el estado de los nodos, ejecute los siguientes comandos:
$ kubectl get nodes $ kubectl run test-pod --image=amazonlinux:2 --restart=Never -- sleep 300 $ kubectl get pods -A
Se mostrará un resultado parecido al siguiente ejemplo:
$ 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
Consulte el registro de su proxy para obtener información adicional sobre la conectividad de sus nodos:
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 -
Información relacionada
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace un año