カスタム ドメインをマッピングする前に、クラスタ内の Knative serving サービスをテスト用にアクセスする方法について説明します。
デフォルトでは、Knative serving クラスタにデプロイするサービスは nip.io
ベースドメインに設定されます。そのため、Ingress ゲートウェイに推奨の名前を使用すると、追加構成なしでサービスをすぐにテストし、リクエストを送信できます。例: http://{SERVICE_NAME}.{NAMESPACE}.kuberun.{EXTERNAL_IP}.nip.io
なお、無料の DNS ワイルドカード サービスである nip.io ドメインなどの DNS ワイルドカードを使用する場合、リクエストの信頼性に関して問題が生じる可能性があります。対照的に、テスト用のカスタム ドメインを設定して使用すると、信頼性が向上します。
必要に応じて、外部 IP アドレスからサービスにアクセスすることもできます。
nip.io
テストドメインの使用
デフォルトの nip.io
ベースドメインを使用してサービスにアクセスするには、Google Cloud コンソール内から URL を探すか、URL を手動で作成します。
コンソール
Google Cloud コンソールで、[Knative serving] ページに移動します。
リストで、URL を取得するサービスをクリックします。
ページの上部付近に URL が表示されます。
例:
http://my-service.default.kuberun.11.111.11.111.nip.io
ここで、my-service は Knative serving サービスの名前、default は Namespace、11.111.11.111 は外部ロードバランサの IP アドレスです。
手動
サービスの URL を手動で作成するには、サービスの名前、サービスが動作している Namespace、ロードバランサの IP アドレスを使用します。
http://SERVICE.NAMESPACE.kuberun.EXTERNAL_IP.nip.io
次のように置き換えます。
- SERVICE_NAME: 実際のサービスの名前。
- NAMESPACE: サービスをデプロイした Namespace。デフォルトでは、サービスは
default
Namespace にデプロイされます。 - EXTERNAL_IP: ロードバランサの外部 IP アドレス。
たとえば、default
Namespace に hello
というサービスがあり、外部 IP アドレスが 12.345.67.890
の場合、URL は次のようになります。
http://hello.default.kuberun.12.345.67.890.nip.io
外部 IP アドレスの使用
必要に応じて、ロードバランサの外部 IP アドレスを使用して cURL コマンドでサービスにアクセスするか、代替 DNS ワイルドカード サービスを手動で構成して、サービスにアクセスできます。
始める前に
Google Cloud CLI と kubectl コマンドライン ツールがインストールされ、最新であることを確認します。
少なくとも Kubernetes Engine デベロッパーの Identity and Access Management ロールまたは同等の権限が必要です。
外部 IP アドレスの取得
GKE Enterprise クラスタが作成されると、Istio Ingress コントローラは一般公開されている IP アドレスで Google Cloud ネットワーク ロードバランサを作成します。
cURL サービスや DNS サービスでサービスへのアクセスを構成するには、まず、ロードバランサ サービスの外部 IP アドレスを取得する必要があります。
コンソール
Google Cloud コンソールからロードバランサの外部 IP アドレスを取得するには:- Google Cloud コンソールの GKE ページに移動します。
GKE に移動 - [Services と ingress] をクリックします。
- クラスタの Istio Ingress のサービスを特定します。Service のタイプは外部ロードバランサで、名前は
istio-ingressgateway
になります。 - クラスタの Istio Ingress サービスが見つかったら、そのエンドポイントをコピーします。これは、ポート番号なしの IP アドレスになります。たとえば、
00.000.000.000:11
がエンドポイントとして表示される場合がありますが、00.000.000.000
のコピーが必要です。
kubectl
ロードバランサの外部 IP を取得するには、次のコマンドを実行します。
kubectl get svc istio-ingressgateway -n ASM-INGRESS-NAMESPACE
ASM-INGRESS-NAMESPACE は、Cloud Service Mesh Ingress が配置されている Namespace に置き換えます。Cloud Service Mesh をデフォルトの構成を使用してインストールした場合は、istio-system
を指定します。
出力は次のようになります。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) istio-ingressgateway LoadBalancer XX.XX.XXX.XX pending 80:32380/TCP,443:32390/TCP,32400:32400/TCP
ここで、EXTERNAL-IP の値は、ロードバランサの外部 IP アドレスです。
ロードバランサの外部 IP アドレスを取得したら、そのアドレスを cURL コマンドや DNS ワイルドカード サービスで使用して、Knative serving サービスにアクセスできます。
cURL
の使用
デフォルトの nip.io
ベースドメインで cURL コマンドを使用して、サービスにリクエストを送信できます。
cURL コマンドでは、サービスの名前や Namespace とともにロードバランサの外部 IP アドレスを指定します。
curl --header 'Host: SERVICE_NAME.NAMESPACE.kuberun.EXTERNAL_IP.nip.io' EXTERNAL_IP
次のように置き換えます。
- SERVICE_NAME: Knative serving サービスの名前。
- NAMESPACE: サービスが動作している Namespace。
- EXTERNAL_IP: ロードバランサの外部 IP アドレス。
例:
curl --header 'Host: my-service.default.kuberun.12.345.67.890.nip.io' http://12.345.67.890
他の DNS ワイルドカード サービスの使用
デフォルトでは、Knative serving サービスは nip.io DNS ワイルドカード サービスを使用します。ただし、sslip.io などの他のサービスを使用することもできます。他の DNS ワイルドカード サービスを構成するには、まずロードバランサの外部 IP アドレスを取得し、その IP アドレスを使用して DNS ワイルドカード サービスを構成する必要があります。
クラスタのドメインの構成
Knative serving は、config-domain
ConfigMap を使用して、デプロイされたすべての Knative serving サービスが使用するベースドメインを定義します。ConfigMap は、Google Cloud コンソールまたは kubectl
コマンドを使用して更新できます。
コンソール
Google Cloud コンソールで、デフォルトのベースドメインを nip.io
から DNS ワイルドカード サービスに変更するには:
Google Cloud コンソールで Knative serving の [ドメイン マッピング] ページに移動します。
[マッピングを追加] > [クラスタのデフォルト ドメインを追加] の順に選択します。
「このドメイン マッピングを、クラスタにデプロイされたすべての Knative serving サービスに適用します」の横にあるチェックボックスをオンにします。
プルダウン メニューからクラスタを選択します。
[ドメイン] フィールドに、使用するワイルドカード DNS サイトを入力します。例:
sslip.io
kubectl
デフォルトのベースドメインを nip.io
から DNS ワイルドカード サイトの 1 つに変更するには、次のコマンドを使用します。
kubectl patch configmap config-domain --namespace knative-serving --patch \ '{"data": {"kuberun.EXTERNAL_IP.nip.io": null, "DNS_SERVICE": ""}}'
次のように置き換えます。
- EXTERNAL_IP: ロードバランサの外部 IP アドレス。
- DNS_SERVICE: 使用しているワイルドカード DNS サイト。例:
sslip.io
サービスが http://{SERVICE_NAME}.{NAMESPACE}.kuberun.{EXTERNAL_IP}.{DNS_SERVICE}
で使用可能になります。