

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 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 的預設容器管理執行時期。如果您使用代理進行網際網路存取，則必須設定 `containerd`，如此才能提取 Kubernetes 和 Amazon EKS 所需的容器映像。

使用下列內容，在 `/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 節點代理程式，且需負責管理其上執行的節點和 Pod。如果您在內部部署環境中使用代理，則必須設定 `kubelet`，如此才能與您 Amazon EKS 叢集的公有或私有端點通訊。

使用下列內容，在 `/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` 作為節點上的憑證提供者，則必須設定 `ssm`，以便其可以與 Amazon 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` 

根據節點上使用的作業系統，取代以下重新啟動命令中的 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]' > [.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 身分識別代理程式](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 會自動在每個混合節點上安裝 `kube-proxy` 作為 DaemonSet。`kube-proxy` 會在由 Amazon EKS 叢集上的 Pod 支援的 服務之間啟用路由。若要設定每個主機，`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
   ```