Kourier ゲートウェイは、Envoy プロジェクトに基づく軽量ゲートウェイであり、Knative コミュニティによって提供されるオープンソースゲートウェイです。Kourier ゲートウェイを使用して、Knative リビジョン間でトラフィックを分散し、gRPC サービス、タイムアウトと再試行、Transport Layer Security (TLS) 証明書、および外部権限付与サービスを構成できます。
前提条件
クラスターに Knative がデプロイされていること。 詳細については、「Knative のデプロイと管理」をご参照ください。
ステップ 1: Kourier ゲートウェイのデプロイ
Knative を最初にデプロイするとき、またはデプロイ完了後に構成を変更することによって、Knative が Kourier ゲートウェイを使用するように構成できます。
新規 Knative インストールの場合
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[コンポーネント] タブの [アドオンコンポーネント] セクションで [Kourier] を見つけ、[アクション] 列の [デプロイ] をクリックします。 表示されるメッセージで、[確認] をクリックします。
[Kourier] コンポーネントの [ステータス] 列に [デプロイ済み] と表示されます。
既存の Knative インストールの場合
次のコマンドを実行して、デフォルトのエディターで
config-networkConfigMap を開きます。kubectl -n knative-serving edit configmap config-networkエディターで、
dataセクションの下にあるingress.classキーを見つけ、その値を以下のようにkourier.ingress.networking.knative.devに変更します。apiVersion: v1 data: ... ingress.class: kourier.ingress.networking.knative.dev # Kourier サービスゲートウェイを使用 ... kind: ConfigMap metadata: name: config-network namespace: knative-servingファイルを保存して閉じます。変更は Kubernetes によって自動的に適用されます。
また、次の例を参照して、Kourier Service にアノテーション 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" # このパラメーターを intranet に設定して、内部向け CLB を作成します。
...
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 ゲートウェイを使用して Service にアクセスする
このセクションでは、helloworld-go という名前の Knative Service を作成し、Kourier ゲートウェイを使用して HTTP または HTTPS 経由で Knative Service にアクセスする方法を示します。
Kourier ゲートウェイを使用して HTTP 経由で Knative Service にアクセスする
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[Knative] ページの [サービス] タブで、[名前空間] を default に設定し、[テンプレートから作成] をクリックし、次の YAML コンテンツをテンプレートエディターにコピーしてから、[作成] をクリックします。
このテンプレートは
helloworld-goという名前の Service を作成します。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"Service の [ステータス] 列に [作成済み] と表示された場合、Service はデプロイされています。
[サービス] ページで、
helloworld-goService のドメイン名とゲートウェイ IP アドレスを、それぞれ [デフォルトドメイン] 列と [ゲートウェイ] 列に記録します。次のコマンドを実行して、
helloworld-goという名前の Service にアクセスします。curl -H "Host: helloworld-go.default.example.com" http://8.141.XX.XX # 取得した実際のゲートウェイ IP アドレスとドメイン名を指定します。期待される出力:
Hello Knative!この出力は、Knative Service に HTTP 経由でアクセスできることを示しています。
Kourier ゲートウェイを使用して HTTPS 経由で Knative Service にアクセスする
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[Knative] ページの [サービス] タブで、[名前空間] を default に設定し、[テンプレートから作成] をクリックし、次の YAML コンテンツをテンプレートエディターにコピーしてから、[作成] をクリックします。
このテンプレートは
helloworld-goという名前の Service を作成します。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"Service の [ステータス] 列に [作成済み] と表示された場合、Service はデプロイされています。
証明書を作成します。
次のコマンドを実行して 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 証明書に基づいてクラスターに Secret を作成します。
kubectl -n knative-serving create secret tls kourier-cert --key tls.key --cert tls.crt
次のコマンドを実行して、
knative-serving名前空間にnet-kourier-controllerという名前の Deployment が存在するかどうかを確認します。kubectl get deployments -n knative-serving次のコマンドを実行して証明書を構成します。
kubectl -n knative-serving edit deployment net-kourier-controllernet-kourier-controllerの構成ページで、次のパラメーターを指定します。CERTS_SECRET_NAMESPACE: 値を作成した Secret が属する名前空間に設定します。CERTS_SECRET_NAME: 値を作成した Secret の名前に設定します。
... 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 Service にアクセスします。
curl -H "Host: helloworld-go.default.example.com" -k --cert tls.crt --key tls.key //8.141.XX.XX # 取得した実際のゲートウェイ IP アドレスとドメイン名を指定します。期待される出力:
Hello Knative!この出力は、Knative Service に HTTPS 経由でアクセスできることを示しています。
(オプション) ステップ 3: Knative モニタリングダッシュボードの表示
Knative は、すぐに使用できるモニタリング機能を提供します。[Knative] ページで、[モニタリングダッシュボード] タブをクリックして、指定した Service のモニタリングデータを表示します。Knative モニタリングダッシュボードを有効にする方法の詳細については、「Knative モニタリングダッシュボードの表示」をご参照ください。
関連ドキュメント
Knative Services のカスタムドメイン名を指定できます。詳細については、「カスタムドメイン名とパスの使用」をご参照ください。
証明書を構成して、HTTPS 経由で Knative Services にアクセスできます。詳細については、「HTTPS 経由で Service にアクセスするための証明書の設定」をご参照ください。
Knative に gRPC Service をデプロイして、ネットワーク効率を向上させることができます。詳細については、「Knative での gRPC Service のデプロイ」をご参照ください。
プローブを構成して、Knative Services のヘルスステータスと可用性をモニターできます。詳細については、「Knative でのポートプロービングの設定」をご参照ください。
Elastic Container Instance をインターネットに接続する場合は、Elastic IP アドレス (EIP) を Elastic Container Instance に関連付ける必要があります。詳細については、「Knative Service が実行される Elastic Container Instance への EIP の関連付け」をご参照ください。