大規模なwebアプリケーション、きめ細かいトラフィックルーティングまたは自動スケーリングを必要とするアプリケーション、およびHTTP/HTTPS要求に対して複雑なルーティング要件を持つアプリケーションのKnativeサービスのトラフィックをルーティングするには、Application Load Balancer (ALB) Ingressを使用することを推奨します。 ALBはアプリケーション層で実行され、HTTP、HTTPS、クイックUDPインターネット接続 (QUIC) などのプロトコルをサポートします。 ALBは高い弾力性を提供し、レイヤー7で大量のネットワークトラフィックを処理できます。 ALB Ingressは、自動スケーリングと複数のカナリアリリースルールをサポートする、完全マネージド型でO&Mフリーのゲートウェイです。
前提条件
Knativeはクラスターにデプロイされています。 詳細については、「Knativeのデプロイ」「」をご参照ください。
ALB Ingressコントローラがインストールされています。 詳細については、「ALB Ingressコントローラーの管理」をご参照ください。
ステップ1: ALB Ingressのデプロイ
KnativeでALB Ingressをデプロイする場合、Knativeによって自動的に作成されたALBインスタンスを使用するか、既存のALBインスタンスを指定できます。
方法1: ALB IngressをデプロイするときにALBインスタンスを自動的に作成する
Knativeのデプロイ中にALB Ingressを設定できます。 Knativeがデプロイされている場合、ALB Ingressを設定するためにKnativeの設定ファイルを変更できます。
KnativeをデプロイするときのALB Ingressの設定
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[コンポーネント] タブで、[Knativeのデプロイ] をクリックします。 Knativeのデプロイページで、ALBを選択し、少なくとも2つのvSwitchを選択します。 ページの指示に従ってKnativeをデプロイします。
vSwitchの作成方法の詳細については、「vSwitchの作成と管理」をご参照ください。
ALB Ingressを設定するためにKnativeの設定ファイルを変更する
Knativeがデプロイされている場合、ALB Ingressを指定するようにKnativeの構成ファイルを変更できます。 Knativeのデプロイ方法の詳細については、「ACKクラスターにKnativeをデプロイする」および「ACKサーバーレスクラスターにKnativeをデプロイする」をご参照ください。
次のコマンドを実行して、config-network.yamlファイルを変更します。
kubectl -n knative-serving edit configmap config-network
次のテンプレートを参照して、config-network.yamlファイルを作成します。
ingress.class: alb.ingress.networking.knative.de v
を変更し、vswitch-ids
パラメーターを設定し、config-network
ファイルを保存して終了します。 ALB Ingressをサポートするリージョンとゾーンの詳細については、ALBが利用可能なリージョンとゾーン.apiVersion: v1 data: ... ingress.class: alb.ingress.networking.knative.dev # Specify the ALB Ingress controller. vswitch-ids: vsw-uf6kbvc7mccqia2pi****,vsw-uf66scyuw2fncpn38**** # Replace with the IDs of the two vSwitches that you created in different zones. The system automatically binds the vSwitches when you create an ALB instance. ... kind: ConfigMap metadata: name: config-network namespace: knative-serving ...
方法2: 既存のALBインスタンスを使用してALB Ingressを設定する
Knativeの設定ファイルを変更して、既存のALBインスタンスを使用してALB Ingressを設定できます。
次のコマンドを実行して、config-network.yamlファイルを変更します。
kubectl -n knative-serving edit configmap config-network
次のテンプレートに基づいてconfig-network.yamlファイルを変更して保存します。
設定ファイルで
ingress.class: alb.ingress.networking.knative.de v
を変更し、albconfig
を既存のALB Ingressに設定します。vswitch-ids
パラメーターを設定する必要はありません。apiVersion: v1 data: ... ingress.class: alb.ingress.networking.knative.dev # Specify the ALB Ingress controller. albconfig: alb-dev-albconfig # Specify the name of an existing AlbConfig. You must specify this parameter if you use an existing ALB Ingress. ... kind: ConfigMap metadata: name: config-network namespace: knative-serving ...
手順2: ALB Ingressを使用してサービスにアクセスする
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
Knativeページの [サービス] タブで、[名前空間] ドロップダウンリストから [デフォルト] を選択し、[テンプレートから作成] をクリックし、次のYAMLコンテンツをコードエディターにコピーし、[作成] をクリックします。
テンプレートは、
helloworld-go
という名前のサービスを作成します。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: containers: - image: registry-vpc.cn-beijing.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://alb-******.cn-beijing.alb.aliyuncs.com # Replace the IP address and domain name with the actual values.
期待される出力:
Hello Knative!
(オプション) 手順3: Knativeモニタリングダッシュボードの表示
Knativeは、すぐに使えるモニタリング機能を提供します。 [Knative] ページで、[モニタリングダッシュボード] タブをクリックして、指定したサービスのモニタリングデータを表示します。 Knativeモニタリングダッシュボードを有効にする方法の詳細については、「」「Knativeモニタリングダッシュボードの表示」をご参照ください。
関連ステップ
HTTPSによるアクセスの設定
トランスポート層セキュリティ (TLS) でKnativeサービスを保護するには、ALBConfigで証明書を指定します。TLSアクセスは、注釈Knative. k8s.alibabacloud/tls: "true"
を使用して、knativeサービスで有効にできます。 例:
証明書をシークレットとして管理するには、「」をご参照ください。手順2: シークレットとして管理される証明書の作成。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld
namespace: default
annotations:
knative.k8s.alibabacloud/tls: "true"
spec:
template:
spec:
containers:
- image: registry-vpc.cn-shenzhen.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
env:
- name: TARGET
value: "Knative"
次のコマンドを実行してHTTPSサービスにアクセスします。
curl -H "host: helloworld.default.knative.top" https://alb-ppcate4ox6ge9m1wik.cn-shenzhen.alb.aliyuncs.com -k
期待される出力:
Hello Knative!
HTTPリクエストをHTTPSポート443にリダイレクトする
HTTPリクエストは、アノテーションnetworking.knative.de v/http-protocol
を使用して、Knative ServiceのHTTPSポート443にリダイレクトできます。 例:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
annotations:
networking.knative.dev/http-protocol: redirected
spec:
template:
spec:
containers:
- image: registry-vpc.cn-beijing.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
env:
- name: TARGET
value: "Knative"
CNAMEレコードの追加
ネットワークリソースへのアクセスを容易にするために、CNAMEレコードを使用して、カスタムドメイン名をALBインスタンスのドメイン名にマップできます。 詳細については、「ALBインスタンスへのCNAMEレコードの追加」をご参照ください。
関連ドキュメント
Knative Servicesのドメイン名をカスタマイズできます。 詳細については、「カスタムドメイン名の設定」をご参照ください。
HTTPS経由でKnativeサービスにアクセスするように証明書を設定できます。 詳細については、「HTTPS経由でサービスにアクセスするための証明書の設定」をご参照ください。
KnativeにgRPCサービスをデプロイして、ネットワーク効率を向上させることができます。 詳細については、「KnativeでのgRPCサービスのデプロイ」をご参照ください。
Knative Servicesのヘルスステータスと可用性を監視するためのプローブを設定できます。 詳細については、「Knativeでのポートプロービングの設定」をご参照ください。
elasticコンテナインスタンスをインターネットに接続する場合は、elastic IPアドレス (EIP) をelasticコンテナインスタンスに関連付ける必要があります。 詳細については、「Knative Serviceが実行されているEIPのelasticコンテナーインスタンスへの関連付け」をご参照ください。