このドキュメントでは、HTTP / HTTPS プロキシ経由で GKE on AWS からトラフィックを転送する方法について説明します。クラスタ作成時にプロキシ構成を指定します。
概要
GKE on AWS は、次の理由で、プロキシ経由で送信インターネット トラフィックを転送できます。
- Connect を介して Google Cloud にクラスタを登録するため
- Connect エージェントを実行するため
- Container Registry からイメージをダウンロードするため
制限事項
httpProxy
フィールドとhttpsProxy
フィールドでは、https://
で始まる URL がサポートされません。http://
を使用する必要があります。ポート 443 へのリクエストでは HTTPS を使用します。httpProxy
、httpsProxy
、noProxy
の値を設定する必要があります。noProxy
フィールドにドメイン、IP、CIDR を追加することが必要な場合があります。VPC の IP 範囲を追加することをおすすめします。Google Kubernetes Engine バージョン 1.22 では、GKE on AWS により Pod アドレス CIDR と Service アドレス CIDR が自動的に追加されます。
前提条件
このセクションでは、プロキシを使用する前に適用する必要がある前提条件について説明します。
VPC エンドポイントを有効にする
プロキシを構成する前に、GKE on AWS のインストール環境用に VPC エンドポイントを作成する必要があります。
VPC エンドポイントを使用すると、プライベート サブネット内のリソースから、公衆インターネット アクセスなしで AWS サービスにアクセスできます。
次の表に、GKE on AWS で VPC エンドポイントを必要とする AWS サービスと、エンドポイントのタイプ、エンドポイントへのアクセス権が必要なセキュリティ グループを示します。
サービス | エンドポイントのタイプ | セキュリティ グループ |
---|---|---|
自動スケーリング | インターフェース | コントロール プレーン、ノードプール |
EC2 | インターフェース | コントロール プレーン、ノードプール |
EFS | インターフェース | コントロール プレーン |
負荷分散 | インターフェース | コントロール プレーン、ノードプール |
鍵管理サービス | インターフェース | コントロール プレーン、ノードプール |
S3 | ゲートウェイ | コントロール プレーン、ノードプール |
Secret Manager | インターフェース | コントロール プレーン、ノードプール |
セキュリティ トークン サービス(STS) | インターフェース | コントロール プレーン、ノードプール |
エンドポイントは AWS VPC Console から作成できます。VPC エンドポイントの作成時に設定するオプションは VPC 構成によって異なります。
セキュリティ グループを定義する
GKE on AWS は、プロキシ サーバーに接続してソフトウェア コンポーネントをダウンロードできる必要があります。プロキシ サーバーへのアウトバウンド接続を可能にする AWS セキュリティ グループを探すか、新たに作成します。セキュリティ グループが、コントロール プレーン、ノードプールのセキュリティ グループからプロキシのアドレスとポートへの送信アクセスを許可する必要があります。このセキュリティ グループの ID(sg-12345678
など)を保存します。
タイプ | プロトコル | 送信元ポート | 送信先ポート | アドレス |
---|---|---|---|---|
下り(外向き) | TCP | プロキシポート | プロキシポート | プロキシ セキュリティ グループ |
プロキシの許可リスト
GKE on AWS で Google Cloud サービスに接続するには、プロキシ サーバーで次のドメインへのトラフィックを許可する必要があります。
.gcr.io
cloudresourcemanager.googleapis.com
container.googleapis.com
gkeconnect.googleapis.com
gkehub.googleapis.com
oauth2.googleapis.com
securetoken.googleapis.com
storage.googleapis.com
sts.googleapis.com
www.googleapis.com
servicecontrol.googleapis.com
logging.googleapis.com
monitoring.googleapis.com
opsconfigmonitoring.googleapis.com
GCP_LOCATION-gkemulticloud.googleapis.com
GCP_LOCATION
は、GKE Enterprise クラスタが存在する Google Cloud リージョンに置き換えます。us-west1
または別のサポートされているリージョンを指定します。
AWS IAM ロールを更新する
GKE on AWS が AWS Secret Manager からプロキシ構成を読み取るには、クラスタのコントロール プレーンのロールとノードプール ロールに secretsmanager:GetSecretValue
を追加する必要があります。
この権限を追加するには、コントロール プレーンとノードプールのポリシーに追加します。詳細については、IAM ポリシーの編集をご覧ください。
プロキシ構成ファイルを作成する
プロキシ構成は、AWS Secrets Manager シークレットに JSON 文字列として保存されます。この構成は、ファイルとして aws
コマンドライン ツールに渡すことができます。このセクションでは、そのファイルを作成する方法について説明します。
次の表で、このファイルの内容について説明します。
フィールド | 説明 | 例 | 必須 |
---|---|---|---|
httpProxy |
プロキシ サーバーの URL。この値には、ホスト名 / IP アドレスと、必要に応じてポート、ユーザー名、パスワードを含める必要があります。 | "http://user:password@10.184.37.42:80" "10.184.37.42" |
はい |
httpsProxy |
暗号化された HTTPS トラフィックのプロキシ URL。httpsProxy の値が空の場合、httpProxy URL が使用されます。 | "http://10.101.16.31:80"
|
はい |
noProxy |
プロキシから除外する URL のカンマ区切りのリスト。それぞれの値は、IP アドレス、CIDR 範囲、ドメイン名、またはアスタリスク文字(*)です。先頭のドット(例: 「.google.com」)で指定されているドメインは、サブドメインが必要であることを示しています。単一のアスタリスク(*)は、すべてのプロキシ構成を無視します。 | "1.2.3.4,10.0.0.0/16,example.com,.site.com" |
はい |
構成ファイルを作成するには、
httpProxy
キー、noProxy
キー、およびオプションのhttpsProxy
キーの値を含む JSON ファイルを作成します。{ "httpProxy": "AUTHENTICATION_URL", "httpsProxy": "AUTHENTICATION_URL", "noProxy": "NO_PROXY_ADDRESSES" }
次のように置き換えます。
AUTHENTICATION_URL
: プロキシのユーザー名とパスワードを含むエンコードされた URLNO_PROXY_ADDRESSES
: CIDR ブロックと URL のカンマ区切りのリスト(例:10.0.0.0/16,http://example.com
)
次のセクションで使用するためにファイルを保存します。
aws
コマンドライン ツールを使用して、この JSON データを含むシークレットを AWS Secret Manager で作成します。aws secretsmanager create-secret \ --name SECRET_NAME \ --secret-string file://PROXY_CONFIGURATION_FILE
次のように置き換えます。
SECRET_NAME
: 新しいシークレットの名前PROXY_CONFIGURATION_FILE
: プロキシ構成ファイルのパス
出力には、シークレットの Amazon リソース名(ARN)とコンテンツが含まれます。これで、クラスタを作成するときにこのシークレットを参照できるようになりました。
プロキシを使用するクラスタを作成する
アウトバウンド接続に HTTP プロキシを使用するように GKE on AWS を構成するには、次の操作を行います。
クラスタの作成の手順に沿って、proxy-secret-arn
フラグと proxy-secret-version-id
フラグを渡します。
gcloud container aws clusters create CLUSTER_NAME \
--proxy-secret-arn=PROXY_SECRET_ARN \
--proxy-secret-version-id=PROXY_SECRET_VERSION \
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前PROXY_SECRET_ARN
: プロキシ設定を含むシークレットの ARN(例:arn:aws::secretsmanager:us-east-2:111122223333:secret:example/ExampleSecret-jiObOV
)PROXY_SECRET_VERSION
: シークレットのバージョン ID(例:EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE
)
プロキシ構成を更新する
クラスタ コントロール プレーンまたはノードプールのプロキシ構成を更新できます。プロキシ構成の ARN を更新するには、まずコントロール プレーンまたはノードプールの AWS IAM ロールを更新する必要があります。
AWS IAM ロールを更新する
プロキシ構成が保存されている ARN を変更する前に、クラスタのコントロール プレーンのロールおよびノードプールのロールにシークレット ARN への読み取りアクセス権があることを確認する必要があります。secretsmanager:GetSecretValue
権限を持つ IAM ステートメントが特定のリソース ARN をスコープとしている場合は、プロキシ構成を更新する前に、そのリストに新しいシークレット ARN を追加します。
クラスタ プロキシ構成を更新する
クラスタのプロキシ構成を更新するには、Google Cloud CLI を使用します。
gcloud container aws clusters update CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--proxy-secret-arn=PROXY_SECRET_ARN \
--proxy-secret-version-id=PROXY_SECRET_VERSION
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前GOOGLE_CLOUD_LOCATION
: クラスタを管理するサポートされている Google Cloud リージョンPROXY_SECRET_ARN
: プロキシ設定を含むシークレットの ARNPROXY_SECRET_VERSION
: シークレットのバージョン ID(例:EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE
)
ノードプールのプロキシ構成を更新する
ノードプールのプロキシ構成を更新するには、Google Cloud CLI を使用します。
gcloud container aws node-pools update NODE_POOL_NAME
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--proxy-secret-arn=PROXY_SECRET_ARN \
--proxy-secret-version-id=PROXY_SECRET_VERSION
以下を置き換えます。
NODE_POOL_NAME
: ノードプールの名前CLUSTER_NAME
: クラスタの名前GOOGLE_CLOUD_LOCATION
: クラスタを管理するサポートされている Google Cloud リージョンPROXY_SECRET_ARN
: プロキシ設定を含むシークレットの ARNPROXY_SECRET_VERSION
: シークレットのバージョン ID(例:EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE
)
プロキシ構成の削除
クラスタのコントロール プレーンまたはノードプールからプロキシ構成を削除できます。これらのオペレーションは独立しています。コントロール プレーンから構成を削除しても、クラスタのノードプールからは削除されません。
コントロール プレーンのプロキシ構成を削除する
クラスタ コントロール プレーンのプロキシ構成を削除するには、Google Cloud CLI を使用します。
gcloud container aws clusters update CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--clear-proxy-config
以下を置き換えます。
CLUSTER_NAME
: クラスタの名前GOOGLE_CLOUD_LOCATION
: クラスタを管理するサポートされている Google Cloud リージョン(例:us-west1
)
ノードプールのプロキシ構成を削除する
ノードプールからプロキシ構成を削除するには、Google Cloud CLI を使用します。
gcloud container aws node-pools update NODE_POOL_NAME
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--clear-proxy-config
以下を置き換えます。
NODE_POOL_NAME
: ノードプールの名前CLUSTER_NAME
: クラスタの名前GOOGLE_CLOUD_LOCATION
: クラスタを管理するサポートされている Google Cloud リージョン(例:us-west1
)
次のステップ
- クラスタを作成する方法に関する追加情報をご覧ください。