하이브리드 노드용 프록시 구성

하이브리드 노드용 프록시 구성

온프레미스 환경에서 프록시 서버를 사용할 때 하이브리드 노드와 클러스터가 프록시 서버를 사용하도록 구성하는 방법을 설명합니다.

출처: 문서

본문

온프레미스 환경에서 데이터센터 또는 엣지 환경을 떠나는 트래픽에 프록시 서버를 사용한다면 노드와 클러스터를 프록시 서버를 사용하도록 각각 별도로 구성해야 합니다.

  • 클러스터 — 클러스터에서 kube-proxy가 프록시 서버를 사용하도록 구성해야 합니다. kube-proxy는 Amazon EKS 클러스터를 만든 후 구성해야 합니다.
  • 노드 — 노드에서 운영 체제, containerd, kubelet, Amazon SSM 에이전트가 프록시 서버를 사용하도록 구성해야 합니다. 이러한 변경은 운영 체제 이미지 빌드 중 또는 각 하이브리드 노드에서 nodeadm init을 실행하기 전에 수행할 수 있습니다.

노드 수준 구성

다음 구성을 운영 체제 이미지에 적용하거나 각 하이브리드 노드에서 nodeadm init을 실행하기 전에 적용해야 합니다.

containerd 프록시 구성

containerd는 Kubernetes의 기본 컨테이너 관리 런타임입니다. 인터넷 접근에 프록시를 사용한다면 Kubernetes와 Amazon EKS가 요구하는 컨테이너 이미지를 풀 수 있도록 containerd를 구성해야 합니다.

각 하이브리드 노드의 /etc/systemd/system/containerd.service.d 디렉터리에 다음 내용으로 http-proxy.conf라는 파일을 만듭니다. proxy-domain과 port를 환경의 값으로 바꾸세요.

[Service]
Environment="HTTP_PROXY=http://proxy-domain:port"
Environment="HTTPS_PROXY=http://proxy-domain:port"
Environment="NO_PROXY=localhost"

user-data로 containerd 구성

이 파일을 위해 containerd.service.d 디렉터리를 만들어야 합니다. 재부팅 없이 구성 파일을 적용하려면 systemd를 다시 로드해야 합니다. AL2023에서는 스크립트가 실행될 때 서비스가 이미 실행 중일 가능성이 높으므로 서비스를 다시 시작해야 합니다.

mkdir -p /etc/systemd/system/containerd.service.d
echo '[Service]' > /etc/systemd/system/containerd.service.d/http-proxy.conf
echo 'Environment="HTTP_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/containerd.service.d/http-proxy.conf
echo 'Environment="HTTPS_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/containerd.service.d/http-proxy.conf
echo 'Environment="NO_PROXY=localhost"' >> /etc/systemd/system/containerd.service.d/http-proxy.conf
systemctl daemon-reload
systemctl restart containerd

kubelet 프록시 구성

kubelet은 각 Kubernetes 노드에서 실행되고 노드와 그 위에서 실행되는 Pod를 관리하는 책임이 있는 Kubernetes 노드 에이전트입니다. 온프레미스 환경에서 프록시를 사용한다면 kubelet이 Amazon EKS 클러스터의 공용 또는 프라이빗 엔드포인트와 통신할 수 있도록 kubelet을 구성해야 합니다.

각 하이브리드 노드의 /etc/systemd/system/kubelet.service.d/ 디렉터리에 다음 내용으로 http-proxy.conf라는 파일을 만듭니다. proxy-domain과 port를 환경의 값으로 바꾸세요.

[Service]
Environment="HTTP_PROXY=http://proxy-domain:port"
Environment="HTTPS_PROXY=http://proxy-domain:port"
Environment="NO_PROXY=localhost"

user-data로 kubelet 구성

이 파일을 위해 kubelet.service.d 디렉터리를 만들어야 합니다. 재부팅 없이 구성 파일을 적용하려면 systemd를 다시 로드해야 합니다. AL2023에서는 스크립트가 실행될 때 서비스가 이미 실행 중일 가능성이 높으므로 서비스를 다시 시작해야 합니다.

mkdir -p /etc/systemd/system/kubelet.service.d
echo '[Service]' > /etc/systemd/system/kubelet.service.d/http-proxy.conf
echo 'Environment="HTTP_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/kubelet.service.d/http-proxy.conf
echo 'Environment="HTTPS_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/kubelet.service.d/http-proxy.conf
echo 'Environment="NO_PROXY=localhost"' >> /etc/systemd/system/kubelet.service.d/http-proxy.conf
systemctl daemon-reload
systemctl restart kubelet

ssm 프록시 구성

ssm은 하이브리드 노드를 초기화하는 데 사용할 수 있는 자격 증명 공급자 중 하나입니다. ssm은 AWS로 인증하고 kubelet이 사용하는 임시 자격 증명을 생성하는 책임이 있습니다. 온프레미스 환경에서 프록시를 사용하고 노드에서 ssm을 자격 증명 공급자로 사용한다면 ssm이 Amazon SSM 서비스 엔드포인트와 통신할 수 있도록 ssm을 구성해야 합니다.

운영 체제에 따라 다음 경로에 각 하이브리드 노드에 http-proxy.conf라는 파일을 만듭니다.

  • Ubuntu — /etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service.d/http-proxy.conf
  • Amazon Linux 2023 및 Red Hat Enterprise Linux — /etc/systemd/system/amazon-ssm-agent.service.d/http-proxy.conf

파일을 다음 내용으로 채웁니다. proxy-domain과 port를 환경의 값으로 바꾸세요.

[Service]
Environment="HTTP_PROXY=http://proxy-domain:port"
Environment="HTTPS_PROXY=http://proxy-domain:port"
Environment="NO_PROXY=localhost"

user-data로 ssm 구성

이 파일을 위해 ssm systemd 서비스 파일 디렉터리를 만들어야 합니다. 디렉터리 경로는 노드에서 사용하는 운영 체제에 따라 다릅니다.

  • Ubuntu — /etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service.d
  • Amazon Linux 2023 및 Red Hat Enterprise Linux — /etc/systemd/system/amazon-ssm-agent.service.d

노드에서 사용하는 운영 체제에 따라 아래 다시 시작 명령의 systemd 서비스 이름을 바꾸세요.

  • Ubuntu — snap.amazon-ssm-agent.amazon-ssm-agent
  • Amazon Linux 2023 및 Red Hat Enterprise Linux — amazon-ssm-agent
mkdir -p <systemd-service-file-directory>
echo '[Service]' > <systemd-service-file-directory>/http-proxy.conf
echo 'Environment="HTTP_PROXY=http://proxy-domain:port"' >> <systemd-service-file-directory>/http-proxy.conf
echo 'Environment="HTTPS_PROXY=http://proxy-domain:port"' >> <systemd-service-file-directory>/http-proxy.conf
echo 'Environment="NO_PROXY=localhost"' >> <systemd-service-file-directory>/http-proxy.conf
systemctl daemon-reload
systemctl restart <systemd-service-name>

운영 체제 프록시 구성

인터넷 접근에 프록시를 사용한다면 운영 체제가 운영 체제의 패키지 관리자에서 하이브리드 노드 의존성을 풀 수 있도록 구성해야 합니다.

Ubuntu

다음 명령으로 snap이 프록시를 사용하도록 구성합니다.

sudo snap set system proxy.https=http://proxy-domain:port
sudo snap set system proxy.http=http://proxy-domain:port

apt에 프록시를 활성화하려면 /etc/apt/ 디렉터리에 apt.conf라는 파일을 만듭니다. proxy-domain과 port를 환경의 값으로 바꾸세요.

Acquire::http::Proxy "http://proxy-domain:port";
Acquire::https::Proxy "http://proxy-domain:port";

Amazon Linux 2023

dnf가 프록시를 사용하도록 구성합니다. 환경의 proxy-domain과 port 값으로 /etc/dnf/dnf.conf 파일을 만듭니다.

proxy=http://proxy-domain:port

Red Hat Enterprise Linux

yum이 프록시를 사용하도록 구성합니다. 환경의 proxy-domain과 port 값으로 /etc/yum.conf 파일을 만듭니다.

proxy=http://proxy-domain:port

IAM Roles Anywhere 프록시 구성

IAM Roles Anywhere 자격 증명 공급자 서비스는 enableCredentialsFile 플래그로 IAM Roles Anywhere를 사용할 때 자격 증명을 갱신하는 책임이 있습니다(EKS Pod Identity Agent 참조). 온프레미스 환경에서 프록시를 사용한다면 서비스가 IAM Roles Anywhere 엔드포인트와 통신할 수 있도록 구성해야 합니다.

/etc/systemd/system/aws_signing_helper_update.service.d/ 디렉터리에 다음 내용으로 http-proxy.conf라는 파일을 만듭니다. proxy-domain과 port를 환경의 값으로 바꾸세요.

[Service]
Environment="HTTP_PROXY=http://proxy-domain:port"
Environment="HTTPS_PROXY=http://proxy-domain:port"
Environment="NO_PROXY=localhost"

클러스터 전체 구성

이 섹션의 구성은 Amazon EKS 클러스터를 만든 후 각 하이브리드 노드에서 nodeadm init을 실행하기 전에 적용해야 합니다.

kube-proxy 프록시 구성

Amazon EKS는 하이브리드 노드가 클러스터에 조인할 때 각 하이브리드 노드에 kube-proxy를 DaemonSet으로 자동 설치합니다. kube-proxy는 Amazon EKS 클러스터의 Pod가 지원하는 서비스 간 라우팅을 활성화합니다. 각 호스트를 구성하려면 kube-proxy가 Amazon EKS 클러스터 엔드포인트에 대한 DNS 해석을 필요로 합니다.

다음 명령으로 kube-proxy DaemonSet을 편집합니다.

kubectl -n kube-system edit ds kube-proxy

이렇게 하면 구성된 편집기에서 kube-proxy DaemonSet 정의가 열립니다.

HTTP_PROXY와 HTTPS_PROXY 환경 변수를 추가합니다. 참고: NODE_NAME 환경 변수는 구성에 이미 있을 것입니다. proxy-domain과 port를 환경의 값으로 바꾸세요.

containers:
  - command:
    - kube-proxy
    - --v=2
    - --config=/var/lib/kube-proxy-config/config
    - --hostname-override=$(NODE_NAME)
    env:
    - name: HTTP_PROXY
      value: http://proxy-domain:port
    - name: HTTPS_PROXY
      value: http://proxy-domain:port
    - name: NODE_NAME
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: spec.nodeName

더 알아보기 (Learn more)