このチュートリアルでは、Google Kubernetes Engine (GKE) を使用して静的外部 IP アドレスでウェブ アプリケーションをインターネットに公開し、アプリケーションを指すようにドメイン名を構成する方法を示します。 このチュートリアルでは、次のような登録済みのドメイン名を所有していることを前提としています。 example.com Google からドメイン名を登録できます ドメインまたは別のドメイン レジストラ 持っていない場合の選択肢 ## 目的 このチュートリアルでは、次の手順を示します。 ## 費用 このチュートリアルでは、Google Cloud の次の課金対象コンポーネントを使用します。 予測される使用量に基づいて費用を見積もるには、 料金計算ツールを使用する このチュートリアルを終了したら、作成したリソースを削除することで、継続的な課金を避けることができます。詳細については、クリーンアップを参照してください。 ## 始める前に次の手順を実行して、Kubernetes Engine API を有効にします。 - Google Cloud コンソールで Kubernetes Engine のページにアクセスします - プロジェクトの作成または選択 - API と関連サービスが有効になるまで待ちます。これには数分かかることがあります - Cloud プロジェクトで課金が有効になっていることを確認してください。プロジェクトで課金が有効になっているかどうかを確認する方法を学ぶ このチュートリアルで使用する次のコマンド ライン ツールをインストールします。 - gcloud は、Kubernetes Engine クラスタの作成と削除に使用されます gcloud は gcloudCLI - Kubernetes Engine で使用されるクラスタ オーケストレーション システムである Kubernetes の管理に使用される kubectlis。インストールできます kubectlusing gcloud: gcloud コンポーネント インストール kubectl GitHub からサンプル コードを複製します。 git クローン httpsgithub.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/hello-app/manifests のデフォルトを設定する プロジェクト ID を入力する時間を節約するには および Compute Engine ゾーン オプション gcloud コマンドライン ツール gcloudcommand-line ツールを使用すると、デフォルトを設定できます。 gcloud config set プロジェクト project-idgcloud 構成セット コンピューティング/ゾーン コンピューティング ゾーン クラスターを作成する という名前のコンテナ クラスタを作成します。 domain-test を使用して Web アプリケーションをデプロイします。 gcloud container clusters create domain-test ## Web アプリケーションのデプロイ 次のマニフェストは、サンプル Web アプリケーション コンテナー イメージを実行する Deployment を記述しています。 # Copyright 2021 Google LLC # # Apache ライセンス、バージョン 2.0 (「ライセンス # ライセンスに準拠しない限り、このファイルを使用することはできません。 # # httpwww.apache.org でライセンスのコピーを取得できます。 /licenses/LICENSE-2.0 # # 適用される法律で義務付けられていない限り、または書面で合意されていない限り、 # ライセンスに基づいて配布されるソフトウェアは # 「現状のまま」で配布され、 # 明示または黙示を問わず、いかなる種類の保証または条件もなしに # 配布されます。 #権限を管理する特定の言語とライセンスの下での # 制限については、ライセンスを参照してください。ラベル: アプリ: こんにちは層: ウェブ仕様: コンテナ: - 名前: hello-app イメージ: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 ポート: - containerPort: 8080 リソース: リクエスト:CPU:200m 次のコマンドを実行して、Deployment を作成します。 kubectl apply -f helloweb-deployment.yaml ## アプリケーションを公開する 次のいずれかの方法を使用して、GKE でアプリケーションを公開できます。 リージョン IP アドレスで動作する TCP Network Load Balancer を作成する Service を使用します。 HTTP(S) ロード バランサを作成し、グローバル IP アドレスをサポートする Ingress を使用する 各方法の長所と短所の詳細については、Ingress を使用した HTTP(S) 負荷分散の設定を参照してください。 サービスを利用する アプリケーションに静的パブリック IP アドレスがあることを確認するには、静的 IP アドレスを予約する必要があります サービスを使用してアプリケーションを公開することを選択した場合は、地域 IP アドレスを作成する必要があります。次のセクションで説明するように、グローバル IP アドレスは Ingress リソース タイプでのみ機能します。 サービスを使用するには、次の名前の静的 IP アドレスを作成します。 の helloweb-ip 領域 us-central1: gcloud gcloud compute addresses create helloweb-ip --region us-central1 作成した静的 IP アドレスを見つけるには、次のコマンドを実行します。 gcloud 計算アドレスは、helloweb-ip --region us-central1Output を表します: アドレス: 203.0.113.32 .. 設定コネクタ **注: この手順には次のものが必要です 設定コネクタ。フォローする インストール手順 クラスターに Config Connector をインストールするには apiVersion: compute.cnrm.cloud.google.com/v1beta1 種類: ComputeAddress メタデータ: 名前: helloweb-ip 仕様: 場所: us-central1 kubectl apply -f compute-address-regional.yaml静的 IP アドレスを見つけるには、次のコマンドを実行します。 kubectl get computeaddress helloweb-ip -o jsonpathspec.address}'次のマニフェストは、ネットワーク ロード バランサーを作成してパブリック IP で Pod を公開するタイプ LoadBalancer の Service を記述しています。 交換 「YOUR.IP.ADDRESS.HERE」と静的 IP アドレス: # Copyright 2021 Google LLC # # Apache ライセンス、バージョン 2.0 (「ライセンス # ライセンスに準拠しない限り、このファイルを使用することはできません。 # # httpwww.apache.org でライセンスのコピーを取得できます。 /licenses/LICENSE-2.0 # # 適用される法律で義務付けられていない限り、または書面で合意されていない限り、 # ライセンスに基づいて配布されるソフトウェアは # 「現状のまま」で配布され、 # 明示または黙示を問わず、いかなる種類の保証または条件もなしに # 配布されます。 #権限を管理する特定の言語についてはライセンスを参照し、ライセンスの下での # 制限. apiVersion: v1 kind: Service metadata: name: helloweb labels: app: hello spec: selector: app: hello tier: Web ports: - port: 80 targetPort: 8080 タイプ: LoadBalancer loadBalancerIP: "YOUR.IP.ADDRESS.HERE"次に、サービスを作成します。 kubectl apply -f helloweb-service-static-ip.yaml ロード バランサーに関連付けられている予約済み IP アドレスを確認するには: kubectl get serviceOutput: 名前 CLUSTER-IP EXTERNAL-IP PORT(S) AGE helloweb 10.31.254.176 203.0.113.32 80:30690/TCP 54s Ingress を使用する HTTP(S) ロード バランサーを作成する Ingress を使用してアプリケーションを公開することを選択した場合は、グローバル静的 IP アドレスを予約する必要があります。リージョン IP アドレスは Ingress では機能しません Ingress を使用してアプリケーションをインターネットに公開する方法の詳細については、Ingress を使用した HTTP(S) 負荷分散のセットアップのチュートリアルを参照してください。 という名前のグローバル静的 IP アドレスを作成するには ハローウェブ IP: gcloud gcloud compute addresses create helloweb-ip --global 作成した静的 IP アドレスを見つけるには: gcloud 計算アドレスは、helloweb-ip --globalOutput を表します: アドレス: 203.0.113.32 .. 設定コネクタ **注: この手順には次のものが必要です 設定コネクタ。フォローする インストール手順 クラスターに Config Connector をインストールするには apiVersion: compute.cnrm.cloud.google.com/v1beta1 種類: ComputeAddress メタデータ: 名前: helloweb-ip 仕様: 場所: グローバル kubectl apply -f compute-address-global.yaml 次のマニフェストは、2 つのリソースを持つ静的 IP 上の Web アプリケーションである Ingress を記述しています。 - あ Servicewith タイプ:ノードポート - アン サービス名と静的 IP アノテーションで構成された Ingress # Copyright 2021 Google LLC # # Apache ライセンス、バージョン 2.0 (「ライセンス # ライセンスに準拠しない限り、このファイルを使用することはできません。 # # httpwww.apache.org でライセンスのコピーを取得できます。 /licenses/LICENSE-2.0 # # 適用される法律で義務付けられていない限り、または書面で合意されていない限り、 # ライセンスに基づいて配布されるソフトウェアは # 「現状のまま」で配布され、 # 明示または黙示を問わず、いかなる種類の保証または条件もなしに # 配布されます。 #ライセンスを管理する特定の言語と # 制限については、ライセンスを参照してください。 -ip ラベル: app: hello 仕様: defaultBackend: サービス: 名前: helloweb-backend ポート: 番号: 8080apiVersion: v1 種類: サービス メタデータ: 名前: helloweb-backend ラベル: アプリ: hello 仕様: タイプ: NodePort セレクター: アプリ: ハロー階層: Web ポート: - ポート: 8080 targetPort: 8080 の kubernetes.io/ingress.global-static-ip-name アノテーションは名前を指定します HTTP(S) ロードに関連付けられるグローバル IP アドレス リソースの バランサー リソースをクラスターに適用します。 kubectl apply -f helloweb-ingress-static-ip.yamlOutput: Ingress「helloweb」が作成されたサービス「helloweb-backend」が作成されました ロード バランサーに関連付けられている予約済み IP アドレスを確認するには: kubectl get ingressOutput: 名前 ホスト アドレス ポート 年齢 helloweb * 203.0.113.32 80 4m ## 予約済みの静的 IP アドレスにアクセスする ロード バランサーが正しく構成されていることを確認するには、次のいずれかを使用できます。 IPアドレスにアクセスするか、使用するWebブラウザ カール: curl http203.0.113.32/出力: こんにちは世界!ホスト名: helloweb-3766687455-8lvqv ## ドメイン名レコードの設定 ブラウザがドメイン名をクエリするようにするには、次のようにします。 example.com、またはサブドメイン などの名前 blog.example.com で、予約した静的 IP アドレスを指定し、 ドメイン名の DNS (ドメイン ネーム サーバー) レコードを更新する必要があります。 を作成する必要があります。 ドメインまたはサブドメインの **A** (アドレス) タイプの DNS レコード 名前を付け、その値を予約済みの IP アドレスで構成する ドメインの DNS レコードは、ネームサーバーによって管理されます。ネームサーバーは、ドメインを登録した「レジストラ」、Cloud DNS などの DNS サービス、または別のサードパーティ プロバイダである可能性があります。 ネームサーバーが Cloud DNS の場合: Cloud DNS クイックスタート ガイドに従って、アプリケーションの予約済み IP アドレスを使用してドメイン名の DNS A レコードを構成します。ネームサーバーが別のプロバイダーの場合: DNS A レコードの設定に関する DNS サービスのドキュメントを参照して、ドメイン名を構成してください。代わりに Cloud DNS を使用する場合は、Cloud DNS への移行を参照してください。 ## ドメイン名にアクセスする ドメイン名の DNS A レコードが予約した IP アドレスに解決されることを確認するには、ドメイン名にアクセスしてください。 ドメイン名の A レコードの DNS クエリを作成するには、次のコマンドを実行します。 ホスト 指図: ホスト example.com 出力: example.com のアドレスは 203.0.113.32 です この時点で、Web ブラウザーでドメイン名を指定して、Web サイトにアクセスできます。 ## 掃除 このチュートリアルで使用したリソースに対して Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを保持して個々のリソースを削除します。 負荷分散リソースを削除します。 kubectl delete ingress,service -l app=hello 予約済みの静的 IP を解放します。ロード バランサーが削除されると、未使用で予約済みの IP アドレスは無料ではなくなり、未使用の IP アドレスの料金ごとに課金されます。次のコマンドを実行して、静的 IP リソースを解放します。 サービスを使用した場合: gcloud compute addresses delete helloweb-ip --region us-central1 Ingress を使用した場合: gcloud compute addresses delete helloweb-ip --global - サンプル アプリケーションを削除します。 kubectl delete -f helloweb-deployment.yaml 次のコマンドの出力を見て、ロード バランサーが削除されるまで待ちます。出力には、名前に「helloweb」を含む転送ルールは表示されません。 gcloud compute 転送ルール リスト コンテナ クラスタを削除します。 gcloud コンテナ クラスタはドメイン テストを削除します ## 次は何ですか Google Domains を通じて独自のドメイン名を登録する 他の Kubernetes Engine チュートリアルを調べる Google Cloud に関するリファレンス アーキテクチャ、図、チュートリアル、ベスト プラクティスをご覧ください。クラウド アーキテクチャ センターをご覧ください。