AWS 上の Anthos クラスタでのプロキシの使用

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

AWS 上の Anthos クラスタでは、次の理由でインターネットへのアクセスを必要とします。

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

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

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

前提条件

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

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

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

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

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

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

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

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

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

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

Google Cloud サービスへの送信接続を許可する

AWS 上の Anthos クラスタで 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 は、AWS 上の Anthos クラスタのインストールが実行される AWS EC2 リージョンに置き換えます。例: us-west-1.ec2.archive.ubuntu.com/

Prometheus と Kiali で Anthos 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. AWS 上の Anthos クラスタ構成のディレクトリに移動します。このディレクトリは、管理サービスをインストールしたときに作成したものです。

    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" ×

次のステップ

AWS 上の Anthos クラスタのインストール方法の詳細については、以下をご覧ください。

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