このトピックでは、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 ファイルには、キー名が httpProxy
、httpsProxy
、noProxy
の 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 を構成します。
GKE on AWS 構成のディレクトリに移動します。このディレクトリは、管理サービスをインストールしたときに作成したものです。
cd anthos-aws
テキスト エディタで
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 に置き換えます。
ファイルを保存します。
anthos-gke aws management init
を実行して、追加構成のanthos-gke.status.yaml
ファイルを生成します。init
コマンドは、anthos-gke.yaml
ファイル内のAWSManagementService
オブジェクトも検証します。anthos-gke aws management init
anthos-gke aws management apply
を実行して AWS の管理サービスを更新します。anthos-gke aws management apply
次に、ユーザー クラスタを作成します。
AWSCluster
とAWSNodePool
のspec.controlPlane.securityGroupIDs
とspec.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 のインストール方法の詳細については、以下をご覧ください。
専用の AWS VPC を作成する必要がある場合は、マネージド サービスのインストールをご覧ください。
既存の AWS VPC がある場合は、既存のインフラストラクチャとの統合をご覧ください。
クラスタのプロキシ設定の変更については、以下をご覧ください。