Kourier は、Envoy アーキテクチャをベースにした軽量なゲートウェイです。これは Knative コミュニティによって提供されるオープンソースのゲートウェイです。Kourier は Knative のリビジョンに対してトラフィックを分散し、gRPC サービス、タイムアウト、リトライ、TLS 証明書、外部認証と権限付与などの機能をサポートします。
前提条件
手順1:Kourier ゲートウェイのデプロイ
Knative の初期デプロイ時に Kourier ゲートウェイを選択するか、デプロイ後に設定ファイルを変更することができます。
新規 Knative インストールの場合
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[コンポーネント管理] タブの [アドオンコンポーネント] セクションで、[Kourier] の [操作] 列にある [デプロイ] をクリックします。表示されたダイアログボックスで [OK] をクリックします。
[Kourier] の [ステータス] が [デプロイ済み] に変更されると、デプロイメントは成功です。
インストール済みの Knative
config-network ファイルを編集できます。
kubectl -n knative-serving edit configmap config-networkingress.classの値をkourier.ingress.networking.knative.devに変更し、config-network ファイルを保存します。apiVersion: v1 data: ... ingress.class: kourier.ingress.networking.knative.dev # Kourier サービスゲートウェイを使用します。 ... kind: ConfigMap metadata: name: config-network namespace: knative-serving
Kourier ゲートウェイ用にプライベートネットワークの Classic Load Balancer (CLB) を設定することもできます。そのためには、次の例に示すように、Kourier サービスに service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type アノテーションを追加します。
デフォルトでは、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 ゲートウェイ経由でのサービスへのアクセス
このセクションでは、helloworld-go サービスを作成し、Kourier ゲートウェイ経由で HTTP または HTTPS を使用してアクセスする方法について説明します。
HTTP サービスへのアクセス
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サービスのドメイン名とゲートウェイアドレスを [デフォルトドメイン名] 列と [アクセスゲートウェイ] 列から取得します。次のコマンドを実行して、
helloworld-goサービスにアクセスします。curl -H "Host: helloworld-go.default.example.com" http://8.141.XX.XX # ゲートウェイ IP アドレスとドメイン名を実際の情報に置き換えてください。想定される出力:
Hello Knative!想定される出力は、HTTP サービスへのアクセスが成功したことを示します。
HTTPS サービスへのアクセス
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 証明書ファイルからクラスターに Secret を作成します。
kubectl -n knative-serving create secret tls kourier-cert --key tls.key --cert tls.crt
次のコマンドを実行して、
net-kourier-controllerという名前のデプロイメントがknative-serving名前空間に存在するかどうかを確認します。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 サービスにアクセスします。
curl -H "Host: helloworld-go.default.example.com" -k --cert tls.crt --key tls.key https://8.141.XX.XX # ゲートウェイ IP アドレスとドメイン名を実際の情報に置き換えてください。想定される出力:
Hello Knative!想定される出力は、HTTPS サービスへのアクセスが成功したことを示します。
(任意) 手順3:Knative モニタリングダッシュボードの表示
Knative は、すぐに使えるモニタリング機能を提供します。[Knative] ページの [モニタリングダッシュボード] タブをクリックすると、指定したサービスのモニタリングデータを表示できます。Knative モニタリングダッシュボードを有効にする方法の詳細については、「Knative モニタリングダッシュボードの表示」「」をご参照ください。
関連ドキュメント
Knative サービス用にカスタムドメイン名を設定できます。詳細については、「カスタムドメイン名とパスの使用」をご参照ください。
証明書を設定して、HTTPS 経由で Knative サービスにアクセスできます。詳細については、「証明書を設定して HTTPS 経由でサービスにアクセスする」をご参照ください。
Knative に gRPC サービスをデプロイして、ネットワーク効率を向上させることができます。詳細については、「Knative で gRPC サービスをデプロイする」をご参照ください。
プローブを設定して、Knative サービスのヘルスステータスと可用性をモニターできます。詳細については、「Knative でのポートプロービングの設定」をご参照ください。
Elastic Container Instance をインターネットに接続する場合は、Elastic IP (EIP) アドレスを Elastic Container Instance に関連付ける必要があります。詳細については、「Knative サービスが実行されている Elastic Container Instance に EIP を関連付ける」をご参照ください。