

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**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` は認証情報プロバイダーの 1 つであり、これを使用するとハイブリッドノードを初期化できます。`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` システムサービスファイルディレクトリを作成する必要があります。ディレクトリパスは、ノードで使用されているオペレーティングシステムによって異なります。
+ 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` 

ノードで使用されているオペレーティングシステムに応じて、以下の restart コマンドの 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` という名前のファイルを作成します。proxy-domain と port を環境の値に置き換えます。

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