サービスメッシュ(ASM)ゲートウェイは HTTPS をサポートし、証明書を動的にロードできます。Knative を使用して構築されたマイクロサービスに安全にアクセスして管理する必要がある場合は、ASM ゲートウェイを使用して、HTTPS 経由でのみ Knative サービスへのアクセスを許可できます。さらに、サービスエンドポイントの暗号化伝送を構成して、サービス間の通信を保護し、アーキテクチャ全体のセキュリティと信頼性を向上させることができます。
前提条件
ASM 上の Knative を使用して Knative サービスが作成されています。詳細については、「ASM 上の Knative を使用してサーバーレスアプリケーションをデプロイする」をご参照ください。
カスタムドメイン名 aliyun.com は、すでに ASM 上の Knative で使用されています。詳細については、「ASM 上の Knative でカスタムドメイン名を設定する」をご参照ください。
証明書と秘密鍵を作成する
ドメイン名 aliyun.com を使用する前に、ドメイン名のインターネットコンテンツプロバイダー(ICP)ファイリングを申請する必要があります。この例では、ドメイン名 aliyun.com を使用して証明書と秘密鍵を生成します。証明書と秘密鍵をシークレットとして保存します。
ドメイン名 aliyun.com に使用できる証明書と秘密鍵がある場合は、証明書の名前を aliyun.com.crt に、秘密鍵の名前を aliyun.com.key に変更します。
ドメイン名 aliyun.com に使用できる証明書と秘密鍵がない場合は、OpenSSL を使用して、次の手順を実行し、証明書と秘密鍵を生成します。
次のコマンドを実行して、ルート証明書と秘密鍵を作成します。
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt次のコマンドを実行して、aliyun.com サーバーの証明書と秘密鍵を生成します。
openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization" openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt
証明書と秘密鍵が生成されたら、イングレスゲートウェイポッドが属するクラスターの KubeConfig ファイルで次のコマンドを実行して、証明書と秘密鍵を含むシークレットを istio-system ネームスペースに作成し、シークレット名を保存します。
kubectl create -n istio-system secret tls myexample-credential --key=aliyun.com.key --cert=aliyun.com.crtHTTPS を有効にする
次の内容を default.yaml ファイルとして保存します。
apiVersion: istio.alibabacloud.com/v1beta1 kind: ASMKnativeConfig metadata: name: default spec: enabled: true useExisting: true tag: 1.4.0 domainConfig: domainName: aliyun.com # 使用したドメイン名で aliyun.com を置き換えます。 credentialName: myexample-credential # myexample-credential をシークレット名に置き換えます。kubectl を使用して Service Mesh に接続し、次のコマンドを実行します。
kubectl apply -f default.yaml
HTTPS 経由で Knative サービスにアクセスする
アクセスする新しいドメイン名に関する情報を hosts ファイルに追加します。
次のサンプルコードは、hosts ファイルに追加する内容を示しています。
説明xx.xx.xxx.xxを実際にアクセスするゲートウェイアドレスに置き換えます。ゲートウェイアドレスの取得方法の詳細については、「ASM 上の Knative を使用してサーバーレスアプリケーションをデプロイする」の「手順 3: ゲートウェイアドレスを照会する」をご参照ください。xx.xx.xxx.xx helloworld-go.default.aliyun.comHTTPS 経由で Knative サービスにアクセスします。
次のコマンドを実行して Knative サービスにアクセスします。
次のコマンドを実行して、HTTPS 経由で Knative サービスにアクセスします。
curl -k --cert aliyun.com.crt --key aliyun.com.key https://helloworld-go.default.aliyun.com # 予期される出力: Hello Knative!次の Web サイトにアクセスして Knative サービスにアクセスします。
ブラウザーで
https://helloworld-go.default.aliyun.comを入力して、Knative サービスに直接アクセスします。説明ブラウザーを使用して Knative サービスにアクセスすると、自己署名証明書が使用されているため、ブラウザーに入力した URL が危険であるというプロンプトが表示される場合があります。心配しないでください。
関連操作
ASM 上の Knative では、Knative サービスのトラフィック分割に基づいてカナリアリリースを実行できます。 Knative サービスを作成すると、Knative はサービスの最初の Revision を自動的に作成します。 Knative サービスの構成が変更されるたびに、Knative は新しい Revision を作成し、異なる Revision に配信されるトラフィックの割合を変更して、カナリアリリースを実装します。詳細については、「ASM 上の Knative を使用して Knative サービスのトラフィック分割に基づいてカナリアリリースを実行する」をご参照ください。
Knative Serving は、各ポッドに Queue Proxy コンテナを追加します。 Queue Proxy コンテナは、アプリケーションコンテナの同時実行メトリックを Knative Pod Autoscaler(KPA)に送信します。 KPA はメトリックを受信した後、同時リクエスト数と関連する自動スケーリングアルゴリズムに基づいて、Deployment にプロビジョニングされるポッドの数を自動的に調整します。詳細については、「リクエスト数に基づいてポッドの自動スケーリングを有効にする」をご参照ください。