Kourier は、Envoy を基盤とする軽量・オープンソースの Knative ネイティブイングレスゲートウェイであり、Knative コミュニティが提供しています。このゲートウェイをデプロイすることで、Knative のリビジョン間での HTTP/HTTPS トラフィックのルーティング、gRPC サービスの設定、タイムアウトおよび再試行の設定、トランスポート層セキュリティ (TLS) 証明書の管理、および外部権限付与サービスとの統合が可能になります。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
ACK クラスターに Knative がデプロイされていること。「Knative のデプロイと管理」をご参照ください。
Kourier ゲートウェイのデプロイ
Kourier ゲートウェイは、初期の Knative 設定時(ACK コンソールを使用)または既存の Knative 環境への追加デプロイ時(kubectl を使用)のいずれかでデプロイできます。
新規 Knative インストールの場合
ACK コンソールにログインします。左側ナビゲーションウィンドウで、[クラスター] をクリックします。
「クラスター」ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、「アプリケーション」>「Knative」を選択します。
[コンポーネント] タブで、[Kourier] を [アドオンコンポーネント] セクション内より見つけ、[デプロイ] を [操作] 列からクリックします。表示されたダイアログで、[確認] をクリックします。[ステータス] 列の Kourier の状態が デプロイ済み に変更されます。
既存の Knative インストールの場合
以下のコマンドを実行して、デフォルトエディターで
config-networkConfigMap を開きます。kubectl -n knative-serving edit configmap config-networkエディターで、
ingress.classキーをdataセクション内より検索し、その値を以下のように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 により変更が自動的に適用されます。
(任意)内部向けクラシックロードバランサー (CLB) の設定
デフォルトでは、Kourier はインターネット向けのクラシックロードバランサー (CLB) を作成します。代わりに内部向け CLB を使用するには、Kourier サービスマニフェストにアノテーション service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet" を追加します:
apiVersion: v1
kind: Service
metadata:
name: kourier
namespace: knative-serving
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "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アノテーションのデフォルト値はinternetです。内部向け CLB を使用するには、これをintranetに設定してください。
Kourier ゲートウェイ経由での Knative サービスへのアクセス
以下の手順では、サンプル Knative サービス helloworld-go を用いて、HTTP および HTTPS によるアクセス方法を説明します。まずサービスをデプロイした後、必要に応じてプロトコルを選択してください。
以下のcurlコマンドでは、DNS がデフォルトで設定されていないため、Hostヘッダーにドメイン名を指定しています。ゲートウェイに対して DNS を設定した場合は、-H "Host:"フラグを省略できます。
サンプルサービスのデプロイ
ACK コンソールにログインします。左側ナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、ご利用のクラスター名をクリックします。左側ナビゲーションウィンドウから、[アプリケーション] > [Knative] を選択します。
[サービス] タブで、[名前空間] を default に設定し、[テンプレートからの作成] をクリックします。エディターに以下の YAML を貼り付け、[作成] をクリックします。
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 アドレスをメモしてください。次の手順でこれらの値を使用します。
HTTP によるアクセス
以下のコマンドを実行し、先ほどメモしたゲートウェイの IP アドレスおよびドメイン名に置き換えてください。
curl -H "Host: helloworld-go.default.example.com" http://8.141.XX.XX期待される出力:
Hello Knative!HTTPS によるアクセス
ステップ 1: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この手順では、4096 ビットの RSA 鍵と、有効期間が 3650 日の証明書が生成され、helloworld-go.default.example.com および helloworld-go.default.example.cn の Subject Alternative Names (SAN) が設定されます。
ステップ 2:証明書からシークレットの作成
kubectl -n knative-serving create secret tls kourier-cert --key tls.key --cert tls.crtステップ 3:net-kourier-controller Deployment の存在確認
kubectl get deployments -n knative-servingステップ 4:コントローラーへの証明書設定
kubectl -n knative-serving edit deployment net-kourier-controllerspec.containers[].env 下に、以下の 2 つの環境変数を追加します。
...
spec:
containers:
- env:
- name: CERTS_SECRET_NAMESPACE
value: knative-serving
- name: CERTS_SECRET_NAME
value: kourier-cert
...| パラメーター | 説明 |
|---|---|
CERTS_SECRET_NAMESPACE | シークレットが作成された名前空間 (knative-serving) |
CERTS_SECRET_NAME | シークレットの名前 (kourier-cert) |
ステップ 5:コントローラー Pod の実行状態の確認
kubectl -n knative-serving get po期待される出力:
NAME READY STATUS RESTARTS AGE
net-kourier-controller-****** 1/1 Running 0 10sステップ 6:HTTPS によるサービスへのアクセス
curl -H "Host: helloworld-go.default.example.com" -k --cert tls.crt --key tls.key https://8.141.XX.XX期待される出力:
Hello Knative!(任意)Knative モニタリングダッシュボードの表示
Knative には組み込みモニタリングが含まれています。[Knative] ページで、[モニタリングダッシュボード] タブをクリックして、サービスのメトリックを表示します。設定手順については、「Knative モニタリングダッシュボードの表示」をご参照ください。
次のステップ
カスタムドメイン名とパスの使用 — Knative サービスにカスタムドメイン名を設定します。
HTTPS を使用してサービスにアクセスするための証明書を設定する — 本番環境向けのTLS 証明書を設定します。
Knative に gRPC サービスをデプロイする — gRPC によるネットワーク効率の向上
ポートプロービングの設定 —— Knative サービスのヘルスステータスと可用性をモニターします。
Knative サービスが実行されている elastic コンテナインスタンスに EIP を関連付ける — Elastic IP アドレス (EIP) を使用して elastic コンテナインスタンスをインターネットに接続します。