大規模な Web アプリケーション、詳細なトラフィックルーティングや自動スケーリングを必要とするアプリケーション、および HTTP/HTTPS リクエストに複雑なルーティング要件を持つアプリケーションの Knative サービスのトラフィックをルーティングするには、Application Load Balancer (ALB) Ingress を使用することをお勧めします。ALB はアプリケーション層で実行され、HTTP、HTTPS、Quick UDP Internet Connections (QUIC) などのプロトコルをサポートします。ALB は高い弾力性を備え、レイヤー 7 で大量のネットワークトラフィックを処理できます。ALB Ingress は、自動スケーリングと複数のカナリアリリースルールをサポートする、フルマネージドで O&M フリーのゲートウェイです。
前提条件
クラスターに Knative がデプロイされていること。詳細については、「」をご参照ください。Knative のデプロイと管理。
ALB Ingress コントローラーがインストールされていること。詳細については、「ALB Ingress コントローラーの管理」をご参照ください。
Flannel ネットワークプラグインを使用するクラスターでは、Knative サービスは NodePort サービスタイプを介して公開する必要があります。この動作を有効にするには、
config-networkConfigMap にパラメーターeni: falseを追加します。config-network.yamlを開いて編集します。kubectl -n knative-serving edit configmap config-network開いたエディターで、以下に示すように
dataセクションの下にeni: false行を追加します。apiVersion: v1 data: ... eni: false # この構成を追加します。 ... kind: ConfigMap metadata: name: config-network namespace: knative-serving ...
ステップ 1: ALB Ingress のデプロイ
Knative で ALB Ingress をデプロイするときに、Knative によって自動的に作成された ALB インスタンスを使用するか、既存の ALB インスタンスを指定できます。
方法 1: ALB Ingress のデプロイ時に ALB インスタンスを自動的に作成する
Knative のデプロイ中に ALB Ingress を構成できます。Knative がデプロイされている場合は、Knative の構成ファイルを変更して ALB Ingress を構成できます。
Knative のデプロイ時に ALB Ingress を構成する
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、 を選択します。
[コンポーネント] タブで、[Knative のデプロイ] をクリックします。[Knative のデプロイ] ページで、[ALB] を選択し、少なくとも 2 つの vSwitch を選択します。ページ上の指示に従って Knative をデプロイします。
vSwitch の作成方法の詳細については、「vSwitch の作成と管理」をご参照ください。
Knative の構成ファイルを変更して ALB Ingress を構成する
Knative がデプロイされている場合は、Knative の構成ファイルを変更して ALB Ingress を指定できます。Knative のデプロイ方法の詳細については、「ACK クラスターに Knative をデプロイする」および「ACK Serverless クラスターに Knative をデプロイする」をご参照ください。
次のコマンドを実行して、
config-network.yamlファイルを変更します。kubectl -n knative-serving edit configmap config-network次のテンプレートを参照して、
config-network.yamlファイルを変更して保存します。ingress.class: alb.ingress.networking.knative.devを変更し、vswitch-idsパラメーターを構成して、config-networkファイルを保存して終了します。ALB Ingress をサポートするリージョンとゾーンの詳細については、「リージョンとゾーン」をご参照ください。apiVersion: v1 data: ... ingress.class: alb.ingress.networking.knative.dev # ALB Ingress コントローラーを指定します。 vswitch-ids: vsw-uf6kbvc7mccqia2pi****,vsw-uf66scyuw2fncpn38**** # 異なるゾーンで作成した 2 つの vSwitch の ID に置き換えます。ALB インスタンスを作成すると、システムは自動的に vSwitch をバインドします。 intranet: "true" # 内部 ALB インスタンスを作成します。 ... 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.devを変更し、albconfigを既存の ALB Ingress に設定します。vswitch-idsパラメーターを構成する必要はありません。apiVersion: v1 data: ... ingress.class: alb.ingress.networking.knative.dev # ALB Ingress コントローラーを指定します。 albconfig: alb-dev-albconfig # 再利用する既存のパブリック向け ALB インスタンスの名前を指定します。 ... kind: ConfigMap metadata: name: config-network namespace: knative-serving ...
ステップ 2: ALB Ingress を使用してサービスにアクセスする
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[Knative] ページの [サービス] タブで、[名前空間] ドロップダウンリストから default を選択し、[テンプレートから作成] をクリックし、次の 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 # IP アドレスとドメイン名を実際の値に置き換えます。期待される出力:
Hello Knative!
(オプション) ステップ 3: Knative モニタリングダッシュボードの表示
Knative は、すぐに使用できるモニタリング機能を提供します。[Knative] ページで、[モニタリングダッシュボード] タブをクリックして、指定したサービスのモニタリングデータを表示します。Knative モニタリングダッシュボードを有効にする方法の詳細については、「Knative モニタリングダッシュボードの表示」をご参照ください。
関連ステップ
HTTPS 経由のアクセスを構成する
Transport Layer Security (TLS) を使用して Knative サービスを保護するには、ALBConfig で証明書を指定します。TLS アクセスは、注釈 knative.k8s.alibabacloud/tls: "true" を使用して Knative サービスで有効にできます。例:
証明書を Secret として管理する方法の詳細については、「ステップ 2: Secret として管理される証明書を作成する」をご参照ください。。
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 にリダイレクトする
注釈 networking.knative.dev/http-protocol を使用して、Knative サービスで HTTP リクエストを 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"
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 サービスのカスタムドメイン名を使用できます。詳細については、「カスタムドメイン名とパスの使用」をご参照ください。
証明書を構成して、HTTPS 経由で Knative サービスにアクセスできます。詳細については、「証明書を構成して HTTPS 経由でサービスにアクセスする」をご参照ください。
Knative に gRPC サービスをデプロイして、ネットワーク効率を向上させることができます。詳細については、「Knative に gRPC サービスをデプロイする」をご参照ください。
プローブを構成して、Knative サービスのヘルスステータスと可用性をモニターできます。詳細については、「Knative でのポートプロービングの構成」をご参照ください。
Elastic Container Instance をインターネットに接続する場合は、Elastic IP アドレス (EIP) を Elastic Container Instance に関連付ける必要があります。詳細については、「Knative サービスが実行されている Elastic Container Instance に EIP を関連付ける」をご参照ください。