大規模な Web アプリケーション、きめ細かなトラフィックルーティングや自動的な弾性スケーリングを必要とするアプリケーション、HTTP/HTTPS リクエストのルーティング要件が複雑なアプリケーションでは、Application Load Balancer (ALB) ゲートウェイを使用して Knative サービスのトラフィックをルーティングできます。ALB は、HTTP、HTTPS、QUIC などのアプリケーション層プロトコル向けに設計されたロードバランシングサービスです。ALB は高い弾力性を提供し、大量のレイヤー 7 トラフィックを処理できます。ALB ゲートウェイは完全マネージド型のゲートウェイであり、O&M は不要です。自動的な弾性スケーリングを提供し、複数のカナリアリリース ポリシーをサポートします。
前提条件
ALB Ingress コントローラーがデプロイされていること。詳細については、「ALB Ingress コントローラーの管理」をご参照ください。
クラスターで Flannel ネットワークプラグインを使用している場合は、Knative の Kubernetes サービスを NodePort サービスとして設定する必要があります。そのためには、config-network ConfigMap に
eni: falseパラメーターを追加します。config-network.yaml ファイルを編集します。
kubectl -n knative-serving edit configmap config-networkファイルを以下のように変更し、変更を保存します。
apiVersion: v1 data: ... eni: false # この設定を追加します。 ... kind: ConfigMap metadata: name: config-network namespace: knative-serving ...
ステップ 1:ALB ゲートウェイのデプロイ
Knative で ALB ゲートウェイをデプロイする際、Knative によって自動的に作成される ALB インスタンスを使用するか、既存の ALB インスタンスを指定することができます。
方法 1:ALB ゲートウェイのデプロイ時に ALB インスタンスを自動的に作成する
Knative をデプロイする際に ALB ゲートウェイを設定できます。すでに Knative をデプロイしている場合は、Knative 設定ファイルを変更することで ALB ゲートウェイを設定できます。
Knative のデプロイ時に ALB ゲートウェイを設定する
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスター をクリックします。
クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のペインで、 を選択します。
[コンポーネント管理] タブで、[ワンクリックで Knative をデプロイ] をクリックします。[Knative のデプロイ] ページで、[ALB] サービスゲートウェイと少なくとも 2 つの vSwitch を選択し、画面の指示に従って Knative をデプロイします。
詳細については、「vSwitch の作成」をご参照ください。
Knative 設定ファイルを変更して ALB ゲートウェイをデプロイする
既存の Knative デプロイメントの場合、Knative 設定ファイルを変更することで ALB ゲートウェイを設定できます。詳細については、「ACK クラスターでの Knative のデプロイ」または「Serverless Kubernetes (ASK) クラスターでの Knative のデプロイ」をご参照ください。
次のコマンドを実行して、config-network.yaml ファイルを編集します。
kubectl -n knative-serving edit configmap config-networkconfig-network.yaml ファイルを以下のように変更し、変更を保存します。
ALB ゲートウェイを設定するには、
config-networkファイルでingress.class: alb.ingress.networking.knative.devを変更し、vswitch-idsを設定してから、保存して終了します。ALB がサポートするリージョンとゾーンの詳細については、「ALB がサポートするリージョンとゾーン」をご参照ください。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 インスタンスを使用する
Knative 設定ファイルを変更して、既存の ALB インスタンスを使用できます。
次のコマンドを実行して、config-network.yaml ファイルを編集します。
kubectl -n knative-serving edit configmap config-networkconfig-network.yaml ファイルを以下のように変更し、変更を保存します。
構成ファイルで、ingress.class を
alb.ingress.networking.knative.devに、albconfigを既存の ALB インスタンスに設定します。vswitch-idsを構成する必要はありません。apiVersion: v1 data: ... ingress.class: alb.ingress.networking.knative.dev # ALB Ingress コントローラーを使用することを指定します。 albconfig: alb-dev-albconfig # 再利用する既存のインターネット向け ALB インstance の名前を指定します。 ... kind: ConfigMap metadata: name: config-network namespace: knative-serving ...
ステップ 2:ALB ゲートウェイ経由でデプロイされたサービスへのアクセス
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスター をクリックします。
クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[Knative] ページの [サービス管理] タブで、[名前空間] を [default] に設定し、[テンプレートから作成] をクリックし、次の YAML の例をテンプレートに貼り付けて、[作成] をクリックします。
次の YAML の例では、
helloworld-goという名前の Knative サービスを作成します。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サービスを見つけ、[デフォルトドメイン] 列からドメイン名を取得し、[ゲートウェイ] 列からゲートウェイアドレスを取得します。次のコマンドを実行して、
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 モニタリングダッシュボードの表示」をご参照ください。
関連操作
HTTPS アクセスの設定
ALBConfig で証明書を指定し、knative.k8s.alibabacloud/tls: "true" アノテーションを使用して Knative サービスの Transport Layer Security (TLS) アクセスを有効にすることができます。次のコードに例を示します。
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"CNAME レコードの追加
ALB は、カスタムドメイン名を ALB インスタンスのパブリックサービスドメイン名にマッピングするための CNAME 解決をサポートしています。これにより、さまざまなネットワークリソースにアクセスできます。詳細については、「ALB の CNAME 解決の設定」をご参照ください。
参考資料
Knative サービスでカスタムドメイン名を有効にできます。詳細については、「カスタムドメイン名とパスの使用」をご参照ください。
証明書を設定して、HTTPS 経由で Knative サービスにアクセスできます。詳細については、「HTTPS 経由でサービスにアクセスするための証明書の設定」をご参照ください。
Knative に gRPC サービスをデプロイして、ネットワーク効率を向上させることができます。詳細については、「Knative での gRPC サービスのデプロイ」をご参照ください。
プローブを設定して、Knative サービスのヘルスと可用性を監視できます。詳細については、「Knative でのポートプロービングの設定」をご参照ください。
ECI インスタンスがインターネットアクセスを必要とする場合は、Elastic IP アドレス (EIP) をアタッチする必要があります。詳細については、「ECI インスタンスに EIP をアタッチしてインターネットアクセスを有効にする」をご参照ください。