HTTP プロキシを使用する

このドキュメントでは、HTTP / HTTPS プロキシ経由で GKE on AWS からトラフィックを転送する方法について説明します。クラスタ作成時にプロキシ構成を指定します。

概要

GKE on AWS は、次の理由で、プロキシ経由で送信インターネット トラフィックを転送できます。

  • Connect を介して Google Cloud にクラスタを登録するため
  • Connect エージェントを実行するため
  • Container Registry からイメージをダウンロードするため

制限事項

  • httpProxy フィールドと httpsProxy フィールドでは、https:// で始まる URL がサポートされません。http:// を使用する必要があります。ポート 443 へのリクエストでは HTTPS を使用します。
  • httpProxyhttpsProxynoProxy の値を設定する必要があります。
  • 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" はい
  1. 構成ファイルを作成するには、httpProxy キー、noProxy キー、およびオプションの httpsProxy キーの値を含む JSON ファイルを作成します。

    {
      "httpProxy": "AUTHENTICATION_URL",
      "httpsProxy": "AUTHENTICATION_URL",
      "noProxy": "NO_PROXY_ADDRESSES"
    }
    

    次のように置き換えます。

    • AUTHENTICATION_URL: プロキシのユーザー名とパスワードを含むエンコードされた URL
    • NO_PROXY_ADDRESSES: CIDR ブロックと URL のカンマ区切りのリスト(例: 10.0.0.0/16,http://example.com

    次のセクションで使用するためにファイルを保存します。

  2. 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: プロキシ設定を含むシークレットの ARN
  • PROXY_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: プロキシ設定を含むシークレットの ARN
  • PROXY_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

以下を置き換えます。

ノードプールのプロキシ構成を削除する

ノードプールからプロキシ構成を削除するには、Google Cloud CLI を使用します。

gcloud container aws node-pools update NODE_POOL_NAME
  --cluster CLUSTER_NAME \
  --location GOOGLE_CLOUD_LOCATION \
  --clear-proxy-config

以下を置き換えます。

次のステップ