このチュートリアルでは、Google Kubernetes Engine(GKE)を使用して、静的外部 IP アドレスでウェブ アプリケーションをインターネットに公開し、そのアプリケーションを指すドメイン名を構成する方法を説明します。
このチュートリアルでは、登録済みドメイン名(example.com
など)を所有していることを前提とします。ドメインをお持ちでない場合は、Google Domains または他のお好きなドメイン登録事業者を通じてドメイン名を登録できます。
目標
このチュートリアルでは次の手順について説明します。
費用
このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このチュートリアルを終了した後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
次の手順で Kubernetes Engine API を有効にします。- Google Cloud Console で Kubernetes Engine ページにアクセスします。
- プロジェクトを作成または選択します。
- API と関連サービスが有効になるのを待ちます。 これには数分かかることがあります。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
このチュートリアルで使用されている以下のコマンドライン ツールをインストールします。
-
gcloud
は、Kubernetes Engine クラスタの作成と削除に使用されます。gcloud
はgcloud
CLI に含まれています。 -
kubectl
は、Kubernetes Engine で使用されるクラスタ オーケストレーション システムである Kubernetes の管理に使用されます。gcloud
を使用してkubectl
をインストールできます。gcloud components install kubectl
GitHub からサンプルコードのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/hello-app/manifests
gcloud
コマンドライン ツールのデフォルトの設定
次のようにしてデフォルト値を設定しておくと、gcloud
コマンドライン ツールでプロジェクト ID および Compute Engine ゾーン オプションを入力する時間が節約されます。gcloud config set project project-id gcloud config set compute/zone compute-zone
クラスタの作成
domain-test
という名前のコンテナ クラスタを作成して、ウェブ アプリケーションをデプロイします。
gcloud container clusters create domain-test
ウェブ アプリケーションのデプロイ
以下のマニフェストは、サンプルのウェブ アプリケーション コンテナ イメージを実行する Deployment を説明しています。
次のコマンドを実行して Deployment を作成します。
kubectl apply -f helloweb-deployment.yaml
アプリケーションの公開
次のいずれかの方法を使用して、アプリケーションを GKE に公開できます。
Service を使用して、リージョン IP アドレスで動作する TCP ネットワーク ロードバランサを作成します。
Ingress を使用して、HTTP(S) ロードバランサを作成し、グローバル IP アドレスをサポートします。
各メソッドの長所と短所については、Ingress による HTTP(S) 負荷分散の設定をご覧ください。
Service の使用
アプリケーションに静的パブリック IP アドレスが割り当てられていることを保証するには、静的 IP アドレスを予約する必要があります。
Service を使用してアプリケーションを公開する場合は、リージョン IP アドレスを作成する必要があります。次のセクションで説明するように、グローバル IP アドレスは Ingress リソースタイプでのみ機能します。
Service を使用するには、リージョン us-central1
に helloweb-ip
という名前の静的 IP アドレスを作成します。
gcloud
gcloud compute addresses create helloweb-ip --region us-central1
作成した静的 IP アドレスを見つけるには、次のコマンドを実行します。
gcloud compute addresses describe helloweb-ip --region us-central1出力:
address: 203.0.113.32 ...
Config Connector
注: この手順には Config Connector が必要です。Config Connector をクラスタにインストールするには、インストール手順を実施してください。
このマニフェストをデプロイするには、マニフェストを compute-address.yaml というファイル名でマシンにダウンロードしてから、次のコマンドを実行します。kubectl apply -f compute-address-regional.yaml静的 IP アドレスを確認するには、次のコマンドを実行します。
kubectl get computeaddress helloweb-ip -o jsonpath='{.spec.address}'
次のマニフェストでは、LoadBalancer タイプの Service について説明します。この Service は、パブリック IP を持つ Pod を公開するネットワーク ロードバランサを作成します。
YOUR.IP.ADDRESS.HERE を静的 IP アドレスで置き換えます。
次に、Service を作成します。
kubectl apply -f helloweb-service-static-ip.yaml
ロードバランサに関連付けられている予約済み IP アドレスを確認するには、次のコマンドを実行します。
kubectl get service出力:
NAME 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) 負荷分散の設定のチュートリアルをご覧ください。
helloweb-ip
という名前のグローバル静的 IP アドレスを作成するには、次のコマンドを実行します。
gcloud
gcloud compute addresses create helloweb-ip --global
作成した静的 IP アドレスを見つけるには:
gcloud compute addresses describe helloweb-ip --global出力:
address: 203.0.113.32 ...
Config Connector
注: この手順には Config Connector が必要です。Config Connector をクラスタにインストールするには、インストール手順を実施してください。
このマニフェストをデプロイするには、マニフェストを compute-address-global.yaml というファイル名でマシンにダウンロードしてから、次のコマンドを実行します。kubectl apply -f compute-address-global.yaml
以下のマニフェストに記述されている Ingress は、次の 2 つのリソースを持つ静的 IP でウェブ アプリケーションを公開します。
type:NodePort
を使用したService
- サービス名と静的 IP アノテーションで構成された
Ingress
kubernetes.io/ingress.global-static-ip-name
アノテーションは、HTTP(S) ロードバランサに関連付けるグローバル IP アドレス リソースの名前を指定します。
リソースをクラスタに適用します。
kubectl apply -f helloweb-ingress-static-ip.yaml出力:
ingress "helloweb" created service "helloweb-backend" created
ロードバランサに関連付けられた予約済みの IP アドレスを確認するには、次のようにします。
kubectl get ingress出力:
NAME HOSTS ADDRESS PORTS AGE helloweb * 203.0.113.32 80 4m
予約済みの静的 IP アドレスへのアクセス
ロードバランサが正しく構成されていることを確認するには、ウェブブラウザを使用して IP アドレスにアクセスするか、次のように curl
を使用します。
curl http://203.0.113.32/出力:
Hello, world! Hostname: 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 サービスのドキュメントを参照して、ドメイン名を構成します。Google Cloud DNS を使用する場合は、Cloud DNS に移行するをご覧ください。
ドメイン名へのアクセス
ドメイン名の DNS A レコードが予約した IP アドレスに解決されることを確認するには、そのドメイン名にアクセスします。
ドメイン名の A レコードに対して DNS クエリを発行するには、次の host
コマンドを実行します。
host example.com出力:
example.com has address 203.0.113.32
これで、ウェブブラウザにドメイン名を指定して、ウェブサイトにアクセスできます。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
負荷分散リソースを削除します。
kubectl delete ingress,service -l app=hello
予約済みの静的 IP を解放します。ロードバランサを削除すると、未使用だが予約済みである IP アドレスが無料ではなくなり、未使用の IP アドレスの料金に従って課金されます。静的 IP リソースを解放するには、次のコマンドを実行します。
Service を使用する場合:
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 forwarding-rules list
コンテナ クラスタを削除します。
gcloud container clusters delete domain-test
次のステップ
Google Domains 経由でドメイン名を登録する。
Google Cloud に関するリファレンス アーキテクチャ、図、チュートリアル、ベスト プラクティスを確認する。Cloud Architecture Center をご覧ください。