Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
Amazon EKS containerd 노드의 HTTP 프록시 구성을 자동화하려면 어떻게 해야 하나요?
containerd 런타임을 사용하는 Amazon Elastic Kubernetes Service(Amazon EKS) 노드의 HTTP 프록시 구성을 자동화하고 싶습니다.
간략한 설명
Amazon EKS 버전 1.23 이하에서 생성한 관리형 노드 그룹에서 기본 컨테이너 런타임은 Docker입니다. 이 사용 사례인 경우 의 모든 단계에 따라 Containerd 런타임을 지정하세요. Amazon EKS 버전 1.24 이상에서 생성된 관리형 노드 그룹에서 Containerd의 기본 컨테이너 런타임입니다.
관리형 노드 그룹에서 dockerd 대신 Containerd를 사용하려면 userdata에 Containerd 런타임을 지정해야 합니다.
관리형 노드 그룹을 Containerd 런타임으로 전환한 후 Amazon Machine Image(AMI) ID로 사용자 지정 시작 템플릿을 생성합니다. 그런 다음 HTTP 프록시에 대한 설정과 클러스터의 환경 값을 구성할 수 있습니다.
참고: Docker 런타임을 사용하는 노드의 경우, Docker를 사용하는 Amazon EKS 작업자 노드에 대해 HTTP 프록시를 자동 구성하는 방법은 무엇입니까?를 참조하세요.
해결 방법
사용자 지정 시작 템플릿 생성
Containerd를 런타임으로 지정하고 사용자 지정 시작 템플릿을 생성하려면 다음 단계를 완료하세요.
-
Containerd를 관리형 노드 그룹의 런타임으로 지정합니다. userdata에서 bootstrap.sh의 --container-runtime=containerd 옵션을 사용합니다.
-
AMI ID로 사용자 지정 사용자 지정 시작 템플릿을 생성합니다. 이 작업을 수행하지 않으면 관리 노드 그룹이 자동으로 userdata 데이터를 병합합니다.
-
프록시 구성을 Containerd, sandbox-image 및 kubelet으로 설정합니다.
참고: Sandbox-image는 Containerd용 샌드박스를 가져오는 서비스 단위입니다. -
이제 다음 필드를 사용하여 userdata를 설명할 수 있습니다.
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==--
참고: XXXXXXX:3128, YOUR_CLUSTER_CA, API_SERVER_ENDPOINT 및 EKS_CLUSTER_NAME을 해당 프록시, 클러스터 인증 기관(CA), 서버 엔드포인트 및 클러스터 이름으로 바꾸세요. 가상 프라이빗 클라우드(VPC) 엔드포인트를 생성한 후, AWS 서비스 엔드포인트를 NO_PROXY 및 no_proxy에 추가합니다.
aws-node 및 kube-proxy의 프록시 설정 구성
참고: HTTP 프록시를 통해 클러스터에서 인터넷으로 트래픽을 라우팅하고 EKS 엔드포인트가 공개인 경우 다음 단계를 완료해야 합니다. 구성이 다른 경우 이러한 단계는 선택 사항입니다.
ConfigMap을 생성하여 환경 값을 구성합니다. 그런 다음 클러스터에 ConfigMap을 적용합니다. 다음 스크립트를 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
참고: KUBERNETES_SERVICE_CIDR_RANGE 및 VPC_CIDR_RANGE를 사용자의 CIDR 범위의 해당 값으로 바꾸세요. VPC 엔드포인트를 생성한 후 NO_PROXY 및 no_proxy에 AWS 서비스 엔드포인트를 추가할 수 있습니다.
그런 다음 HTTP 프록시 구성을 aws-node 및 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
관리형 노드 그룹 생성
생성한 사용자 지정 시작 템플릿을 사용하는 새 관리형 노드 그룹을 생성합니다.
프록시 테스트
노드 상태를 확인하려면 다음 명령을 실행합니다.
$ kubectl get nodes $ kubectl run test-pod --image=amazonlinux:2 --restart=Never -- sleep 300 $ kubectl get pods -A
다음 예와 유사한 출력이 표시됩니다.
$ 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
프록시 로그에서 노드 연결에 대한 추가 정보를 확인하세요.
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 -
관련 정보
Amazon EKS에서 클러스터를 생성한 후 다른 IAM 사용자 및 역할에 대한 액세스를 제공하려면 어떻게 해야 하나요?

관련 콘텐츠
- 질문됨 7달 전lg...
- 질문됨 3달 전lg...
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 4달 전
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 2년 전