このチュートリアルは、ウェブ アプリケーションを Google Kubernetes Engine(GKE)クラスタにデプロイし、HTTPS ロードバランサで公開することに関心があるクラウド アーキテクトと運用管理者を対象としています。
目標
このチュートリアルの学習内容は次のとおりです。
- GKE クラスタを作成する。
- Terraform を使用してグローバル IP アドレスと Cloud DNS ゾーンを作成する。
- HTTPS ロード バランシングを構成する。
- サンプルのウェブ アプリケーションをデプロイする。
料金
このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
プロジェクトを設定する
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Google Kubernetes Engine, Cloud DNS APIs.
-
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Google Kubernetes Engine, Cloud DNS APIs.
- ドメイン名を所有している必要があります。ドメイン名は 63 文字以下にする必要があります。Google Domains または他の登録事業者を使用できます。
環境変数を設定します。
PROJECT_ID=$(gcloud config get-value project) gcloud config set project $PROJECT_ID gcloud config set compute/region us-central1
コード リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
作業ディレクトリを変更します。
cd kubernetes-engine-samples/autopilot/networking-tutorial
環境の設定
このチュートリアルでは、Cloud Shell を使用してGoogle Cloudでホストされているリソースを管理します。Cloud Shell には、このチュートリアルに必要な、Terraform、kubectl
、gcloud CLI を含むソフトウェアがプリインストールされています。
GKE クラスタを作成する
次の Terraform ファイルによって GKE クラスタが作成されます。
次の Terraform ファイルによってグローバル IP アドレスと Cloud DNS ゾーンが作成されます。
Terraform を初期化します。
terraform init
インフラストラクチャの変更を表示します。
terraform plan
プロンプトが表示されたら、ドメインを入���します(
my-domain.net
など)。Terraform 構成を適用します。
terraform apply --auto-approve
プロンプトが表示されたら、ドメインを入力します(
my-domain.net
など)。出力は次のようになります。
Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Outputs: cluster_name = "networking-cluster" region = "us-central1"
外部アプリケーション ロードバランサを作成する
次のマニフェストには、ManagedCertificate、FrontendConfig、Deployment、Service、Ingress が記述されています。
DOMAIN_NAME
はmy-domain.net
などのドメイン名に置き換えます。このマニフェストには次のプロパティがあります。
networking.gke.io/managed-certificates
: ManagedCertificate の名前。networking.gke.io/v1beta1.FrontendConfig
: FrontendConfig リソースの名前。kubernetes.io/ingress.global-static-ip-name
: IP アドレスの名前。kubernetes.io/ingress.class
: 外部アプリケーション ロードバランサを作成するように GKE Ingress コントローラに指示します。
マニフェストをクラスタに適用します。
kubectl apply -f kubernetes-manifests.yaml
Ingress が作成されたことを確認します。
kubectl describe ingress frontend
出力は次のようになります。
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ADD 2m loadbalancer-controller default/frontend Normal CREATE 1m loadbalancer-controller ip: 203.0.113.2 ...
Ingress のプロビジョニングには数分かかる場合があります。
アプリケーションをテストする
SSL 証明書のステータスを確認します。
kubectl get managedcertificates.networking.gke.io networking-managed-cert
SSL 証明書のプロビジョニングには最長で 30 分ほどかかる場合があります。次の出力は、SSL 証明書の準備ができていることを示しています。
NAME AGE STATUS networking-managed-cert 28m Active
curl
コマンドを実行します。curl -Lv https://DOMAIN_NAME
出力は次のようになります。
* Trying 34.160.115.33:443... * Connected to DOMAIN_NAME (34.160.115.33) port 443 (#0) ... * TLSv1.3 (IN), TLS handshake, Certificate (11): ... * Server certificate: * subject: CN=DOMAIN_NAME ... > Host: DOMAIN_NAME
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud ��������ン����課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
リソースを個別に削除する
Kubernetes リソースを削除します。
kubectl delete -f kubernetes-manifests.yaml
Terraform リソースを削除します。
terraform destroy --auto-approve
プロンプトが表示されたら、ドメインを入力します(
my-domain.net
など)。
次のステップ
- GKE ネットワーキングの詳細を確認する。