Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Como faço para automatizar a configuração do proxy HTTP para nós de processamento do Amazon EKS com o Docker?
Quero automatizar a configuração do proxy HTTP para os nós de processamento do Amazon Elastic Kubernetes Service (Amazon EKS) com dados de usuário.
Resolução
Observação: a resolução a seguir se aplica somente aos nós em que o runtime subjacente é o Docker e não se aplica aos nós com runtime containerd. Para nós com runtime containerd, consulte Como posso automatizar a configuração do proxy HTTP para nós containerd do Amazon EKS?
Para configurar um proxy nos nós de processamento, você deve configurar os componentes necessários do seu cluster do Amazon EKS para se comunicar a partir do proxy. Os componentes incluem, entre outros, o serviço kubelet systemd, kube-proxy, aws-node pods e yum update.
Para automatizar a configuração do proxy para nós de processamento com um runtime do Docker, conclua as seguintes etapas:
-
Encontre o bloco CIDR do endereço IP do seu cluster:
$ kubectl get service kubernetes -o jsonpath='{.spec.clusterIP}'; echoObservação: o comando anterior retorna 10.100.0.1 ou 172.20.0.1, então o bloco CIDR do endereço IP do cluster é 10.100.0.0/16 ou 172.20.0.0/16.
-
Com base na saída do comando, crie um arquivo ConfigMap chamado proxy-env-vars-config.yaml.
Se a saída tiver um endereço IP do intervalo 172.20.x.x, use a seguinte estrutura ConfigMap:apiVersion: v1 kind: ConfigMap metadata: name: proxy-environment-variables namespace: kube-system data: HTTP_PROXY: http://customer.proxy.host:proxy_port HTTPS_PROXY: http://customer.proxy.host:proxy_port NO_PROXY: 172.20.0.0/16,localhost,127.0.0.1,VPC_CIDR_RANGE,169.254.169.254,.internal,s3.amazonaws.com,.s3.us-east-1.amazonaws.com,api.ecr.us-east-1.amazonaws.com,dkr.ecr.us-east-1.amazonaws.com,ec2.us-east-1.amazonaws.comObservação: substitua VPC_CIDR_RANGE pelo bloco CIDR de endereço IPv4 da nuvem privada virtual (VPC) do seu cluster.
Se a saída tiver um endereço IP do intervalo 10.100.x.x, use a seguinte estrutura ConfigMap:apiVersion: v1 kind: ConfigMap metadata: name: proxy-environment-variables namespace: kube-system data: HTTP_PROXY: http://customer.proxy.host:proxy_port HTTPS_PROXY: http://customer.proxy.host:proxy_port NO_PROXY: 10.100.0.0/16,localhost,127.0.0.1,VPC_CIDR_RANGE,169.254.169.254,.internal,s3.amazonaws.com,.s3.us-east-1.amazonaws.com,api.ecr.us-east-1.amazonaws.com,dkr.ecr.us-east-1.amazonaws.com,ec2.us-east-1.amazonaws.comObservação: substitua VPC_CIDR_RANGE pelo bloco CIDR de endereço IPv4 da VPC do seu cluster.
Os clusters do Amazon EKS com acesso privado a endpoints do servidor de API, sub-redes privadas e sem acesso à internet exigem endpoints adicionais. Se você estiver criando um cluster com a configuração anterior, deve criar e adicionar endpoints para os serviços a seguir:
Amazon Elastic Container Registry (Amazon ECR)
Amazon Simple Storage Service (Amazon S3)
Amazon Elastic Compute Cloud (Amazon EC2)
Amazon Virtual Private Cloud (Amazon VPC)
Importante: você deve adicionar o subdomínio público do endpoint à variável NO_PROXY. Por exemplo, adicione o domínio .s3.us-east-1.amazonaws.com para o Amazon S3 na região da AWS us-east-1. Se você ativar o acesso privado ao endpoint para seu cluster do Amazon EKS, deve adicionar o endpoint do Amazon EKS à variável NO_PROXY. Por exemplo, adicione o domínio .us-east-1.eks.amazonaws.com para seu cluster do Amazon EKS na região da AWS us-east-1. -
Verifique se a variável NO_PROXY em configmap/proxy-environment-variables usada pelos pods kube-proxy e aws-node inclui o espaço de endereço IP do cluster do Kubernetes. Por exemplo, 10.100.0.0/16 é usado no exemplo de código anterior para o arquivo ConfigMap em que o intervalo de endereço IP é de 10.100.x.x.
-
Aplique o ConfigMap:
$ kubectl apply -f /path/to/yaml/proxy-env-vars-config.yaml -
Para configurar o Docker daemon e o kubelet, inclua dados do usuário em seus nós de processamento:
Content-Type: multipart/mixed; boundary="==BOUNDARY==" MIME-Version: 1.0 --==BOUNDARY== Content-Type: text/cloud-boothook; charset="us-ascii" #Set the proxy hostname and port PROXY="proxy.local:3128" MAC=$(curl -s http://169.254.169.254/latest/meta-data/mac/) VPC_CIDR=$(curl -s http://169.254.169.254/latest/meta-data/network/interfaces/macs/$MAC/vpc-ipv4-cidr-blocks | xargs | tr ' ' ',') #Create the docker systemd directory mkdir -p /etc/systemd/system/docker.service.d #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,s3.amazonaws.com,.s3.us-east-1.amazonaws.com,api.ecr.us-east-1.amazonaws.com,dkr.ecr.us-east-1.amazonaws.com,ec2.us-east-1.amazonaws.com NO_PROXY=$VPC_CIDR,localhost,127.0.0.1,169.254.169.254,.internal,s3.amazonaws.com,.s3.us-east-1.amazonaws.com,api.ecr.us-east-1.amazonaws.com,dkr.ecr.us-east-1.amazonaws.com,ec2.us-east-1.amazonaws.com EOF #Configure docker with the proxy cloud-init-per instance docker_proxy_config tee <<EOF /etc/systemd/system/docker.service.d/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 #Reload the daemon and restart docker to reflect proxy configuration at launch of instance cloud-init-per instance reload_daemon systemctl daemon-reload cloud-init-per instance enable_docker systemctl enable --now --no-block docker --==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 /etc/eks/bootstrap.sh ${ClusterName} ${BootstrapArguments} # Use the cfn-signal only if the node is created through an AWS CloudFormation stack and needs to signal back to an AWS CloudFormation resource (CFN_RESOURCE_LOGICAL_NAME) that waits for a signal from this EC2 instance to progress through either: # - CreationPolicy https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-creationpolicy.html # - UpdatePolicy https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html # cfn-signal will signal back to AWS CloudFormation using https transport, so set the proxy for an HTTPS connection to AWS CloudFormation /opt/aws/bin/cfn-signal --exit-code $? \ --stack ${AWS::StackName} \ --resource CFN_RESOURCE_LOGICAL_NAME \ --region ${AWS::Region} \ --https-proxy $HTTPS_PROXY --==BOUNDARY==--Importante: você deve atualizar ou criar arquivos de configuração yum, Docker e kubelet antes de iniciar o Docker daemon e o kubelet.
Para obter mais informações sobre como usar um modelo do AWS CloudFormation para incluir dados de usuário nos nós de processamento, consulte Criar nós autogerenciados do Amazon Linux. -
Para atualizar os pods aws-node e kube-proxy, execute os seguintes comandos:
$ 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-proxySe você alterar o ConfigMap, aplique as atualizações e defina o ConfigMap nos pods novamente:
$ kubectl set env daemonset/kube-proxy --namespace=kube-system --from=configmap/proxy-environment-variables --containers='*' $ kubectl set env daemonset/aws-node --namespace=kube-system --from=configmap/proxy-environment-variables --containers='*'Importante: ao atualizar o kube-proxy ou o aws-node, você também deve atualizar todas as modificações do YAML. Para atualizar um ConfigMap para um valor padrão, use os comandos eksctl utils update-kube-proxy ou eksctl utils update-aws-node.
Se o proxy perder a conectividade ao servidor da API, o proxy se torna um único ponto de falha e o comportamento do seu cluster pode ficar imprevisível. Para evitar esse problema, execute seu proxy atrás de um namespace de descoberta de serviços ou balanceador de carga. -
Confirme se as variáveis proxy são usadas nos pods kube-proxy e aws-node:
$ kubectl describe pod kube-proxy-xxxx -n kube-systemExemplo de saída:
Environment: HTTPS_PROXY: <set to the key 'HTTPS_PROXY' of config map 'proxy-environment-variables'> Optional: false HTTP_PROXY: <set to the key 'HTTP_PROXY' of config map 'proxy-environment-variables'> Optional: falseSe você não estiver usando o AWS PrivateLink, verifique o acesso aos endpoints da API por meio de um servidor de proxy para Amazon EC2, Amazon ECR e Amazon S3.
- Tópicos
- Containers
- Idioma
- Português

Conteúdo relevante
- feita há 9 meses
- feita há 6 meses
AWS OFICIALAtualizada há 2 anos