

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# 하이브리드 노드용 프록시 구성
<a name="hybrid-nodes-proxy"></a>

데이터 센터 또는 엣지 환경에서 나가는 트래픽에 대해 온프레미스 환경에서 프록시 서버를 사용하는 경우 프록시 서버를 사용하려면 노드와 클러스터를 개별적으로 구성해야 합니다.

클러스터  
클러스터에서 프록시 서버를 사용하도록 `kube-proxy`를 구성해야 합니다. Amazon EKS 클러스터를 생성한 후 `kube-proxy`를 구성해야 합니다.

노드  
노드에서 프록시 서버를 사용하도록 운영 체제, `containerd`, `kubelet` 및 Amazon SSM 에이전트를 구성해야 합니다. 운영 체제 이미지의 빌드 프로세스 중에 또는 각 하이브리드 노드에서 `nodeadm init`을 실행하기 전에 변경할 수 있습니다.

## 노드 수준 구성
<a name="_node_level_configuration"></a>

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

### `containerd` 프록시 구성
<a name="_containerd_proxy_configuration"></a>

 `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"
```

#### 사용자 데이터의 `containerd` 구성
<a name="_containerd_configuration_from_user_data"></a>

이 파일에 대해 `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` 프록시 구성
<a name="_kubelet_proxy_configuration"></a>

 `kubelet`는 각 Kubernetes 노드에서 실행되는 Kubernetes 노드 에이전트이며 해당 노드에서 실행되는 노드 및 포드를 관리할 책임이 있습니다. 온프레미스 환경에서 프록시를 사용하는 경우 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"
```

#### `kubelet` 사용자 데이터의 구성
<a name="_kubelet_configuration_from_user_data"></a>

이 파일에 대한 `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` 프록시 구성
<a name="_ssm_proxy_configuration"></a>

 `ssm`은 하이브리드 노드를 초기화하는 데 사용할 수 있는 자격 증명 공급자 중 하나입니다. `ssm`은 AWS를 사용하여 인증하고 `kubelet`에서 사용하는 임시 자격 증명을 생성할 책임이 있습니다. 온프레미스 환경에서 프록시를 사용하고 노드에서 자격 증명 공급자로 `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"
```

#### `ssm` 사용자 데이터의 구성
<a name="_ssm_configuration_from_user_data"></a>

이 파일에 대한 `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` 

노드에서 사용되는 운영 체제에 따라 아래 재시작 명령의 시스템 서비스 이름을 바꿉니다.
+ 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]' > [.replaceable]#systemd-service-file-directory/http-proxy.conf
echo 'Environment="HTTP_PROXY=http://[.replaceable]#proxy-domain:port}}"' >> {{systemd-service-file-directory/http-proxy.conf
echo 'Environment="HTTPS_PROXY=http://[.replaceable]#proxy-domain:port}}"' >> [.replaceable]#systemd-service-file-directory/http-proxy.conf
echo 'Environment="NO_PROXY=localhost"' >> [.replaceable]#systemd-service-file-directory/http-proxy.conf
systemctl daemon-reload
systemctl restart [.replaceable]#systemd-service-name
```

### 운영 체제 프록시 구성
<a name="_operating_system_proxy_configuration"></a>

인터넷 액세스에 프록시를 사용하는 경우 운영 체제의 패키지 관리자에서 하이브리드 노드 종속성을 가져올 수 있도록 운영 체제를 구성해야 합니다.

 **Ubuntu** 

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

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

1. `apt`에 대한 프록시를 활성화하려면 `/etc/apt/` 디렉터리에서 `apt.conf`라는 파일을 생성합니다. 프록시 도메인과 포트를 해당 환경의 값으로 바꿉니다.

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

 **Amazon Linux 2023** 

1. 프록시를 사용하도록 `dnf`을 구성합니다. 환경의 프록시 도메인 및 포트 값을 사용하여 `/etc/dnf/dnf.conf` 파일을 생성합니다.

   ```
   proxy=http://{{proxy-domain:port}}
   ```

 **Red Hat Enterprise Linux** 

1. 프록시를 사용하도록 `yum`을 구성합니다. 환경의 프록시 도메인 및 포트 값을 사용하여 `/etc/yum.conf` 파일을 생성합니다.

   ```
   proxy=http://{{proxy-domain:port}}
   ```

### IAM Roles Anywhere 프록시 구성
<a name="_iam_roles_anywhere_proxy_configuration"></a>

IAM Roles Anywhere 자격 증명 공급자 서비스는 `enableCredentialsFile` 플래그와 함께 IAM Roles Anywhere를 사용할 때 자격 증명을 새로 고치는 역할을 합니다([EKS Pod Identity 에이전트](hybrid-nodes-add-ons.md#hybrid-nodes-add-ons-pod-id) 참조). 온프레미스 환경에서 프록시를 사용하는 경우 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"
```

## 클러스터 전체 구성
<a name="_cluster_wide_configuration"></a>

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

### kube-proxy 프록시 구성
<a name="_kube_proxy_proxy_configuration"></a>

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

1. 다음 명령을 사용하여 `kube-proxy` DaemonSet를 편집합니다.

   ```
   kubectl -n kube-system edit ds kube-proxy
   ```

   그러면 구성된 편집기에서 `kube-proxy` DaemonSet 정의가 열립니다.

1. `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
   ```