GKE on AWS でのプロキシの使用

このトピックでは、GKE on AWS 管理サービスからトラフィックをルーティングし、HTTP / HTTPS プロキシ経由で接続する方法について説明します。

GKE on AWS では、次の理由でインターネットへのアクセスが必要になります。

  • 管理サービスでは、Connect を使用してユーザー クラスタを登録します。
  • ユーザー クラスタでは Connect エージェントが実行されます。
  • すべての管理サービスとユーザー クラスタ ノードで、Container Registry からイメージがダウンロードされます。

このトラフィックは、HTTP または HTTPS プロキシ経由でルーティングできます。GKE on AWS 1.8 の Anthos クラスタでは、管理サービスとクラスタごとに個々のプロキシ設定を構成できます。プロキシ設定の変更方法の詳細については、クラスタ プロキシ設定の変更をご覧ください。

anthos-gke.yaml で参照される JSON ファイルでプロキシ設定を宣言します。

前提条件

プロキシを使用するように GKE on AWS を構成する前に、AWS VPC エンドポイントを有効にして、プロキシのセキュリティ グループを定義し、特定の Google Cloud サービスへのアウトバウンド接続を許可する必要があります。

HTTP プロキシを使用するには、ユーザー クラスタで Kubernetes 1.17 以降が実行されている必要があります。

VPC エンドポイントを有効にする

プロキシを構成する前に、GKE on AWS のインストール環境用に VPC エンドポイントを作成する必要があります。VPC エンドポイントを使用すると、プライベート サブネット内のリソースから、公衆インターネット アクセスなしで AWS サービスにアクセスできます。

次の表に、GKE on AWS で VPC エンドポイントを必要とする AWS サービスと、エンドポイントのタイプ、エンドポイントに対するアクセス権が必要な各 GKE on AWS コンポーネントのセキュリティ グループを示します。

サービス エンドポイントのタイプ セキュリティ グループ
自動スケーリング インターフェース 管理プレーン、コントロール プレーン、ノードプール
EC2 インターフェース 管理プレーン、コントロール プレーン、ノードプール
負荷分散 インターフェース 管理プレーン、コントロール プレーン、ノードプール
鍵管理サービス インターフェース 管理プレーン、コントロール プレーン、ノードプール
S3 ゲートウェイ 管理プレーン、コントロール プレーン、ノードプール
セキュリティ トークン サービス(STS) インターフェース 管理プレーン、コントロール プレーン、ノードプール

エンドポイントは AWS VPC Console から作成できます。VPC エンドポイントの作成時に設定するオプションは VPC 構成によって異なります。

セキュリティ グループを定義する

GKE on AWS コンポーネントは、プロキシ サーバーに接続できる必要があります。プロキシ サーバーへのアウトバウンド接続を可能にする AWS セキュリティ グループを探すか、新たに作成します。セキュリティ グループは、管理プレーン、コントロール プレーン、ノードプールのセキュリティ グループからプロキシのアドレスとポートへのアウトバウンド アクセスを許可します。このセキュリティ グループの ID(sg-12345678 など)を保存します。

プロトコル 送信元ポート 送信先ポート アドレス
下り(外向き) TCP プロキシポート プロキシポート プロキシ セキュリティ グループ

Google Cloud サービスへのアウトバウンド接続を許可する

GKE on AWS で Google Cloud サービスに接続するには、プロキシ サーバーで次のドメインへのトラフィックを許可する必要があります。

  • gkeconnect.googleapis.com
  • gkehub.googleapis.com
  • oauth2.googleapis.com
  • storage.googleapis.com
  • www.googleapis.com
  • gcr.io
  • k8s.gcr.io
  • EC2-REGION.ec2.archive.ubuntu.com

EC2-REGION は、GKE on AWS が実行されている AWS EC2 リージョンに置き換えます。例: us-west-1.ec2.archive.ubuntu.com/

Prometheus と Kiali で Cloud Service Mesh を使用している場合は、次のドメインからのアウトバンド アクセスを許可します。

  • docker.io
  • quay.io

プロキシ構成の JSON ファイルの作成

プロキシ構成の JSON ファイルには、キー名が httpProxyhttpsProxynoProxy の 3 つの Key-Value ペアが含まれる 1 つのオブジェクトが含まれています。サーバーに適用する前に、ユーザー名とパスワードが AWS KMS 鍵を使用してエンベロープ暗号化されます。

{
  "httpProxy": "HTTP_PROXY",
  "httpsProxy": "HTTPS_PROXY",
  "noProxy": "NO_PROXY"
}

以下のように置き換えます。

  • HTTP_PROXY を、HTTP リクエストをルーティングするプロキシ サーバー アドレスに置き換えます。
  • HTTPS_PROXY を、HTTPS リクエストをルーティングするプロキシ サーバーに置き換えます。
  • NO_PROXY を、プロキシが使用されない IP、CIDR 範囲、ドメインのリスト(省略可)に置き換えます。

詳細については、構成リファレンスをご覧ください。たとえば、次の構成では 10.0.0.254 でプロキシを使用し、多数のサイトを除外します。

{
  "httpProxy": "http://user:password@10.0.0.254:80",
  "httpsProxy": "http://user:password@10.0.0.254:443",
  "noProxy": "localhost,127.0.0.1,169.254.169.254,10.0.0.0/16,example.com"
}

anthos-gke.yaml へのプロキシの追加

次の手順に沿って操作し AWSManagementService を構成します。

  1. GKE on AWS 構成のディレクトリに移動します。このディレクトリは、管理サービスをインストールしたときに作成したものです。

    cd anthos-aws

  2. テキスト エディタで anthos-gke.yaml を開きます。次の例のように spec.proxy の値を追加します。

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSManagementService
    metadata:
      name: management
    spec:
      version: aws-1.14.1-gke.0
      proxy: PROXY_JSON_FILE
      securityGroupIDs:
      - SECURITY_GROUP_ID
      ...
    

    以下のように置き換えます。

    • PROXY_JSON_FILE は、プロキシの JSON 構成の相対パスに置き換えます。
    • SECURITY_GROUP_ID は、プロキシ サーバーへのアクセス権を持つセキュリティ グループの ID に置き換えます。

    ファイルを保存します。

  3. anthos-gke aws management init を実行して、追加構成の anthos-gke.status.yaml ファイルを生成します。init コマンドは、anthos-gke.yaml ファイル内の AWSManagementService オブジェクトも検証します。

    anthos-gke aws management init
    
  4. anthos-gke aws management apply を実行して AWS の管理サービスを更新します。

    anthos-gke aws management apply
    
  5. 次に、ユーザー クラスタを作成しますAWSClusterAWSNodePoolspec.controlPlane.securityGroupIDsspec.securityGroupIDs に、それぞれプロキシのセキュリティ グループを含めます。これで、クラスタはプロキシにアクセスできます。

構成リファレンス

項目 説明 必須
httpProxy プロキシ サーバーの URL。この値には、ホスト名 / IP アドレスと、必要に応じてポート、ユーザー名、パスワードを含める必要があります。 "http://user:password@10.184.37.42:80"
httpsProxy 暗号化された HTTPS トラフィックのプロキシ URL。httpsProxy が指定されていない場合は、httpProxy URL が使用されます。 "http://user:password@10.101.16.31:80" ×
noProxy プロキシから除外する URL のカンマ区切りのリスト。それぞれの値は、IP アドレス、CIDR 範囲、ドメイン名、またはアスタリスク文字(*)です。先頭のドット(例: 「.google.com」)で指定されているドメインは、サブドメインが必要であることを示しています。アスタリスク * 1 文字だけのものは、プロキシが不要なことを示します。 "1.2.3.4,10.0.0.0/16,example.com,.site.com" ×

次のステップ

GKE on AWS のインストール方法の詳細については、以下をご覧ください。

クラスタのプロキシ設定の変更については、以下をご覧ください。