하이브리드 노드용 프록시 구성
하이브리드 노드용 프록시 구성
온프레미스 환경에서 프록시 서버를 사용할 때 하이브리드 노드와 클러스터가 프록시 서버를 사용하도록 구성하는 방법을 설명합니다.
출처: 문서
본문
온프레미스 환경에서 데이터센터 또는 엣지 환경을 떠나는 트래픽에 프록시 서버를 사용한다면 노드와 클러스터를 프록시 서버를 사용하도록 각각 별도로 구성해야 합니다.
- 클러스터 — 클러스터에서
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