このチュートリアルでは、Google Kubernetes Engine(GKE)を使用して、静的外部 IP アドレスでウェブ アプリケーションをインターネットに公開し、そのアプリケーションを指すドメイン名を構成する方法を説明します。
このチュートリアルでは、example.com などの登録済みのドメイン名を所有していることを前提としています。
ウェブ アプリケーションをデプロイする
以下のマニフェストは、サンプルのウェブ アプリケーション コンテナ イメージを実行する Deployment を説明しています。
Deployment を作成します。
kubectl apply -f helloweb-deployment.yaml
アプリケーションを公開する
次のいずれかの方法を使用して、アプリケーションを GKE に公開できます。
- Service を使用して、リージョン IP アドレスで動作する外部パススルー ネットワーク ロードバランサを作成します。 
- Ingress を使用して、アプリケーション ロードバランサを作成し、グローバル IP アドレスをサポートします。 
各方法のメリットとデメリットの詳細については、Ingress を使用して外部アプリケーション ロードバランサを設定するをご覧ください。
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-regional.yaml として保存します。
マニフェストをクラスタに適用します。
  kubectl apply -f compute-address-regional.yaml
作成した静的 IP アドレスを探します。
  kubectl get computeaddress helloweb-ip -o jsonpath='{.spec.address}'
次のマニフェストでは、LoadBalancer タイプの 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 を使用する
Ingress を使用してアプリケーションを公開する場合は、グローバル静的 IP アドレスを予約する必要があります。アノテーション kubernetes.io/ingress.global-static-ip-name を使用して、グローバル IP アドレスを指定します。
アプリケーションをリージョンのクライアントや Service に公開するには、GKE 用の内部 Ingress リソースをデプロイするときに、必要なアノテーションとともにリージョンの静的内部 IP アドレスを使用します。
Ingress を使用してアプリケーションをインターネットに公開する方法については、Ingress を使用して外部アプリケーション ロードバランサを設定するをご覧ください。
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 アノテーションは、ロードバランサに関連付けるグローバル IP アドレス リソースの名前を指定します。
マニフェストをクラスタに適用します。
kubectl apply -f helloweb-ingress-static-ip.yaml
ロードバランサに関連付けられている 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
これで、ウェブブラウザにドメイン名を指定してウェブサイトにアクセスできるようになりました。