管理サービスは、GKE on AWS クラスタの作成、更新、削除を行います。このトピックでは、専用の AWS Virtual Private Cloud(VPC)内に管理サービスを作成する方法について説明します。既存の VPC がある場合は、既存のインフラストラクチャとの統合をご覧ください。
始める前に
GKE on AWS の使用を始める前に、次のことを確認してください。
- 前提条件を満たしている。
-
Google Cloud CLI で認証する。
gcloud auth login && \ gcloud auth application-default login
必要な値
このトピックを完了するには、前提条件の次の情報が必要です。
- KMS 鍵の ARN またはエイリアス
- Google Cloud サービス アカウント キー
- Google Cloud プロジェクト
- インストールして構成されている
aws
、terraform
、anthos-gke
コマンドライン ツール。 - GKE on AWS が管理クラスタを作成する AWS のリージョンとアベイラビリティ ゾーン。
管理サービスの構成
GKE on AWS 管理サービスは、YAML ファイルを使用して構成します。このファイルは Kubernetes カスタム リソース構成に似ていますが、リソースの表現ではありません。
aws
、terraform
、anthos-gke
コマンドライン ツールがインストールされ、構成されている PC でターミナルを開きます。AWS on GKE 構成用に空のディレクトリを作成し、そのディレクトリに移動します。GKE on AWS のドキュメントでは、構成ディレクトリの例として
anthos-aws
が使用されています。mkdir anthos-aws cd anthos-aws
テキスト エディタで
anthos-gke.yaml
という名前のファイルを作成します。次の内容をファイルに貼り付けます。apiVersion: multicloud.cluster.gke.io/v1 kind: AWSManagementService metadata: name: management spec: version: aws-1.14.1-gke.0 region: AWS_REGION authentication: awsIAM: adminIdentityARNs: - ADMIN_AWS_IAM_ARN kmsKeyARN: KMS_KEY_ARN databaseEncryption: kmsKeyARN: DATABASE_KMS_KEY_ARN googleCloud: projectID: GCP_PROJECT_ID serviceAccountKeys: managementService: MANAGEMENT_KEY_PATH connectAgent: HUB_KEY_PATH node: NODE_KEY_PATH dedicatedVPC: vpcCIDRBlock: VPC_CIDR_BLOCK availabilityZones: - ZONE_1 - ZONE_2 - ZONE_3 privateSubnetCIDRBlocks: - PRIVATE_CIDR_BLOCK_1 - PRIVATE_CIDR_BLOCK_2 - PRIVATE_CIDR_BLOCK_3 publicSubnetCIDRBlocks: - PUBLIC_CIDR_BLOCK_1 - PUBLIC_CIDR_BLOCK_2 - PUBLIC_CIDR_BLOCK_3 # Optional bastionHost: allowedSSHCIDRBlocks: - SSH_CIDR_BLOCK proxy: PROXY_JSON_FILE # optional
次の値を置き換えます。
AWS_REGION は、クラスタを実行する AWS リージョンに置き換えます。
ADMIN_AWS_IAM_ARN は、管理サービスを作成するための AWS IAM 権限を持つユーザーの Amazon リソース名に置き換えます。
aws
ツールに対して認証されたユーザーの ARN を取得するには、aws sts get-caller-identity
を実行します。KMS_KEY_ARN は、作成時に管理サービスのデータを保護する AWS KMS 鍵または KMS 鍵エイリアスの Amazon リソース名に置き換えます。例:
arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
ARN がない場合は、aws kms list-keys
を実行して ARN のリストを取得します。DATABASE_KMS_KEY_ARN は、AWS KMS 鍵または管理サービスの
etcd
データベースを保護する鍵エイリアスの Amazon リソース名に置き換えます。例:arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
GCP_PROJECT_ID は、GKE Enterprise 環境をホストする Google Cloud プロジェクト ID に置き換えます。
MANAGEMENT_KEY_PATH は、Google Cloud 管理のサービス アカウント キーの場所に置き換えます。
HUB_KEY_PATH は、Google Cloud Connect のサービス アカウント キーの場所に置き換えます。
NODE_KEY_PATH は、GKE on AWS ノードのサービス アカウント キーの場所に置き換えます。
VPC_CIDR_BLOCK は、
anthos-gke
が作成した AWS VPC の IP アドレスの CIDR 範囲の合計で置き換えます(例:10.0.0.0/16
)。詳細については、AWS ドキュメントの VPC とサブネットの基本をご覧ください。ZONE_1、ZONE_2、ZONE_3 は、ノードとコントロール プレーンを作成する AWS EC2 アベイラビリティ ゾーンに置き換えます。GKE on AWS は、これらのゾーンにサブネットを作成します。
anthos-gke
を使用してユーザー クラスタの構成を生成すると、GKE on AWS によってこれらのアベイラビリティ ゾーンにコントロール プレーンとノードプールが作成されます。例:us-east-1a
anthos-gke
を使用して 1 つのゾーンにのみユーザー クラスタを作成する場合は、ZONE_2 と ZONE_3 を削除できます。PRIVATE_CIDR_BLOCK_1、PRIVATE_CIDR_BLOCK_2、PRIVATE_CIDR_BLOCK_3 は、プライベート サブネットの CIDR ブロックに置き換えます。管理サービスなどの GKE on AWS のコンポーネントは、プライベート サブネットで実行されます。このサブネットは、
vpcCIDRBlock
で指定された VPC の CIDR 範囲内にある必要があります。アベイラビリティ ゾーン(10.0.1.0/24
など)ごとに 1 つのサブネットが必要です。PUBLIC_CIDR_BLOCK_1、PUBLIC_CIDR_BLOCK_2、PUBLIC_CIDR_BLOCK_3 は、パブリック サブネットの CIDR ブロックに置き換えます。アベイラビリティ ゾーンごとにサブネットが 1 つずつ必要です。パブリック サブネットは、AWS のネットワーク ACL とセキュリティ グループで指定されたセキュリティ グループとアドレス範囲にロードバランサなどのクラスタ サービスを公開します(例:
10.0.100.0/24
)。SSH_CIDR_BLOCK は、踏み台インスタンス(
203.0.113.0/24
など)へのインバウンド SSH を許可する CIDR ブロックに置き換えます。任意の IP アドレスからの SSH を許可するには、0.0.0.0/0
を使用します。(省略可)PROXY_JSON_FILE は、プロキシ構成ファイルの相対パスで置き換えます。プロキシを使用していない場合は、この行を削除します。
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
anthos-gke aws management apply
コマンドが完了するまでに、最大で 10 分ほどかかる場合があります。コマンドが完了すると、管理サービスが AWS で実行されます。
オプション フィールド
上記の anthos-gke.yaml
ファイルには、ほとんどのユーザーが必要とする一般的なフィールド セットが示されています。anthos-gke.yaml
の構成では、さまざまなオプション フィールドもサポートされます。これには次のようなものが含まれます。
- spec.bootstrapS3Bucket は、GKE on AWS 構成データの AWS S3 バケットを指定します。
- spec.tags は、クラスタ関連の AWS リソースにタグを付けます。
- spec.securityGroupIDs は、管理クラスタに追加のセキュリティ グループ ID を割り当てます。
- spec.*Volume とそのサブフィールド volumeType、iops、kmsKeyARN は、EBS ボリューム パラメータを調整します。
- spec.terraform.stateGCSBucket は、Terraform 構成データの Google Cloud サービス バケットを指定します。
anthos-gke.yaml
でサポートされているすべてのフィールドの詳細については、AWS 管理サービスのリファレンスをご覧ください。
管理サービスに接続する
次に、anthos-gke
を使用して GKE on AWS 管理サービスに接続し、認証します。
デフォルト設定を使用して管理サービスを作成すると、コントロール プレーンには、AWS VPC の外部からはアクセスできないプライベート IP アドレスが設定されます。管理サービスには、次の 3 つの方法のいずれかでアクセスできます。
- Amazon の AWS Direct Connect サービスを経由する。
- インターネットと GKE on AWS サブネット間の接続をプロキシする踏み台インスタンスを使用する。
- VPN を使用する。
専用の VPC で管理サービスを作成すると、GKE on AWS によって、パブリック サブネットに踏み台インスタンスが自動的に作成されます。VPN や AWS Direct Connect 経由で管理サービスに接続する場合、この踏み台インスタンスは必要ありません。それ以外の場合で、踏み台インスタンスを介して管理サービスへ接続するには、次の操作を行います。
terraform
ツールを使用して、踏み台インスタンスへの SSH トンネルを開くスクリプトを生成します。Terraform のバージョンを選択して、次のコマンドを実行します。Terraform 0.12、0.13
terraform output bastion_tunnel > bastion-tunnel.sh chmod 755 bastion-tunnel.sh
Terraform 0.14.3 以降
terraform output -raw bastion_tunnel > bastion-tunnel.sh chmod 755 bastion-tunnel.sh
Terraform は、
~/.ssh/anthos-gke
にある踏み台インスタンスの SSH 認証鍵を参照するbastion-tunnel.sh
スクリプトを作成します。トンネルを開くには、
bastion-tunnel.sh
スクリプトを実行します。トンネルはlocalhost:8118
から踏み台インスタンスに転送されます。踏み台インスタンスへのトンネルを開くには、次のコマンドを実行します。
./bastion-tunnel.sh -N -4
SSH トンネルからのメッセージがこのウィンドウに表示されます。接続を閉じる準備ができたら、Ctrl+C を使用するか、ウィンドウを閉じて処理を停止します。
新しいターミナルを開き、GKE on AWS 構成のディレクトリに移動します。
認証用の
kubeconfig
を生成します。~/.kube/config
に保存されている構成にanthos-gke
を使用して認証情報を追加します。anthos-gke aws management get-credentials
kubectl
を使用して管理サービスに接続できることを確認します。env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info
出力には、Management Service API サーバーの URL が含まれます。
次のステップ
- ユーザー クラスタを作成する。
- GKE on AWS でプロキシを使用する。
kubectl
構成を変更して、より少ないコマンドライン オプションで GKE on AWS に接続する。