Kourier ゲートウェイは、Envoy プロジェクトに基づく軽量ゲートウェイであり、Knative コミュニティによって提供されるオープンソースゲートウェイです。 Kourier ゲートウェイを使用すると、Knative リビジョン全体にトラフィックを分散し、gRPC サービス、タイムアウトと再試行、Transport Layer Security(TLS)証明書、および外部認証サービスを構成できます。
前提条件
ACK Serverless クラスター で DNS サービスディスカバリが有効になっています。 詳細については、「サービスディスカバリ用の DNS」をご参照ください。
Knative がクラスターにデプロイされています。 詳細については、「Knative をデプロイする」をご参照ください。
手順 1:Kourier ゲートウェイをデプロイする
ACK コンソール にログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[コンポーネント] タブの [アドオンコンポーネント] セクションで、[Kourier] を見つけ、[アクション] 列の [デプロイ] をクリックします。 表示されるメッセージで、[確認] をクリックします。
[Kourier] コンポーネントの [ステータス] 列に [デプロイ済み] と表示されている場合、コンポーネントはデプロイされています。
(オプション) 次の例を参照して、Kourier サービスにアノテーション
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type
を追加することにより、Kourier ゲートウェイ用に内部向け Classic Load Balancer(CLB)を構成します。デフォルトでは、Kourier ゲートウェイはインターネット向け CLB を作成します (アノテーション値のデフォルトは
internet
です)。 CLB を変更するには、アノテーション値をintranet
に変更します。apiVersion: v1 kind: Service metadata: name: kourier namespace: knative-serving annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet" # 内部向け CLB を作成するには、このパラメーターを intranet に設定します。 ... spec: ports: - name: http2 port: 80 protocol: TCP targetPort: 8080 - name: https port: 443 protocol: TCP targetPort: 8443 selector: app: 3scale-kourier-gateway type: LoadBalancer
手順 2:Kourier ゲートウェイを使用してサービスにアクセスする
このセクションでは、helloworld-go という名前の Knative サービスを作成して、Kourier ゲートウェイを使用して HTTP または HTTPS 経由で Knative サービスにアクセスする方法を示します。
Kourier ゲートウェイを使用して HTTP 経由で Knative サービスにアクセスする
ACK コンソール にログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[サービス] ページの [Knative] タブで、[名前空間] を default に設定し、[テンプレートから作成] をクリックし、次の YAML コンテンツをテンプレートエディターにコピーして、[作成] をクリックします。
テンプレートによって、
helloworld-go
という名前のサービスが作成されます。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 env: - name: TARGET value: "Knative"
[ステータス] 列に [作成済み] と表示されている場合、サービスはデプロイされています。
[サービス] ページで、[デフォルト ドメイン] 列と [ゲートウェイ] 列に、それぞれ
helloworld-go
サービスのドメイン名とゲートウェイ IP アドレスを記録します。次のコマンドを実行して、
helloworld-go
という名前のサービスにアクセスします。curl -H "Host: helloworld-go.default.example.com" http://8.141.XX.XX # 取得した実際のゲートウェイ IP アドレスとドメイン名を指定します。
期待される出力:
Hello Knative!
この出力は、Knative サービスに HTTP 経由でアクセスできることを示しています。
Kourier ゲートウェイを使用して HTTPS 経由で Knative サービスにアクセスする
ACK コンソール にログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[サービス] ページの [Knative] タブで、[名前空間] を default に設定し、[テンプレートから作成] をクリックし、次の YAML コンテンツをテンプレートエディターにコピーして、[作成] をクリックします。
テンプレートによって、
helloworld-go
という名前のサービスが作成されます。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 env: - name: TARGET value: "Knative"
[ステータス] 列に [作成済み] と表示されている場合、サービスはデプロイされています。
証明書を作成します。
次のコマンドを実行して、TLS 証明書を生成します。
openssl genrsa -out tls.key 4096 openssl req -subj "/CN=*.example.com/L=*.example.com" -sha256 -new -key tls.key -out tls.csr echo subjectAltName = DNS:helloworld-go.default.example.com,DNS:helloworld-go.default.example.cn > extfile.cnf openssl x509 -req -days 3650 -sha256 -in tls.csr -signkey tls.key -out tls.crt -extfile extfile.cnf
次のコマンドを実行して、生成した TLS 証明書に基づいてクラスターにシークレットを作成します。
kubectl -n knative-serving create secret tls kourier-cert --key tls.key --cert tls.crt
次のコマンドを実行して、
knative-serving
名前空間にnet-kourier-controller
という名前のデプロイメントが存在するかどうかを確認します。kubectl get deployments -n knative-serving
次のコマンドを実行して、証明書を構成します。
kubectl -n knative-serving edit deployment net-kourier-controller
net-kourier-controller
構成ページで、次のパラメーターを指定します。CERTS_SECRET_NAMESPACE
: この値を、作成した Secret が属する名前空間に設定します。CERTS_SECRET_NAME
: 値を、作成したシークレットの名前に設定します。
... spec: containers: - env: - name: CERTS_SECRET_NAMESPACE value: knative-serving - name: CERTS_SECRET_NAME value: kourier-cert ...
構成が完了したら、次のコマンドを実行して net-kourier-controller のステータスを確認します。
kubectl -n knative-serving get po
期待される出力:
NAME READY STATUS RESTARTS AGE net-kourier-controller-****** 1/1 Running 0 10s
次のコマンドを実行して、HTTPS 経由で Knative サービスにアクセスします。
curl -H "Host: helloworld-go.default.example.com" -k --cert tls.crt --key tls.key //8.141.XX.XX # 取得した実際のゲートウェイ IP アドレスとドメイン名を指定します。
期待される出力:
Hello Knative!
この出力は、Knative サービスに HTTPS 経由でアクセスできることを示しています。
(オプション) 手順 3:Knative モニタリングダッシュボードを表示する
Knative は、すぐに使用できるモニタリング機能を提供します。 [Knative] ページで、[モニタリングダッシュボード] タブをクリックして、指定されたサービスのモニタリングデータを表示します。 Knative モニタリングダッシュボードを有効にする方法の詳細については、「Knative モニタリングダッシュボードを表示する」をご参照ください。
参照
Knative サービスのカスタムドメイン名をカスタマイズできます。 詳細については、「カスタムドメイン名を構成する」をご参照ください。
HTTPS 経由で Knative サービスにアクセスするための証明書を構成できます。 詳細については、「HTTPS 経由でサービスにアクセスするための証明書を構成する」をご参照ください。
ネットワーク効率を向上させるために、Knative に gRPC サービスをデプロイできます。 詳細については、「Knative に gRPC サービスをデプロイする」をご参照ください。
プローブを構成して、Knative サービスのヘルスステータスと可用性を監視できます。 詳細については、「Knative でポートプロービングを構成する」をご参照ください。
エラスティックコンテナインスタンスをインターネットに接続する場合、エラスティック IP アドレス (EIP) をエラスティックコンテナインスタンスに関連付ける必要があります。 詳細については、「Knative サービスが実行されているエラスティックコンテナインスタンスに EIP を関連付ける」をご参照ください。