このトピックでは、Apigee ハイブリッドで使用する SNI 以外のクライアントを有効にする方法について説明します。
SNI 以外のクライアントの構成方法
このセクションでは、Apigee ハイブリッドで SNI(Server Name Indication)以外のクライアントのサポートを有効にする方法について説明します。
SNI は、初期 TLS handshake 中に TLS ピア(クライアント)が接続するホスト名を指定する方法を定義します。SNI は 2003 年から TLS の一部となっています。SNI 以前は、TLS ピアが handshake を開始するために HELLO を送信すると、受信側のピアは常に同じ認証情報で応答していました。SNI は、単一のロードバランサが TLS 接続管理用に複数の異なるホスト名と認証情報セットをサポートできるようにするために導入されました。現在、SNI は TLS クライアントの大部分で使用されています。
これにはいくつかの例外があります。たとえば、Google Cloud ロードバランサは、バックエンドへの接続に SNI 以外のハンドシェイクを使用します。
Apigee ハイブリッドが Google Cloud Load Balancer のバックエンドであるか、Apigee ハイブリッドが他の SNI 以外のクライアントをサポートする必要があるため、SNI を使用しない TLS ハンドシェイクを処理できるように Apigee ハイブリッドを構成する場合は、次の手順に沿って操作します。SNI 以外のネゴシエーションは、フォールバックとして機能します。Apigee ハイブリッドは、SNI を使用しないクライアントに対してこれを使用します。
ApigeeRoute
リソースを作成する。enableNonSniClient
がtrue
に設定されていることを確認します。apiVersion: apigee.cloud.google.com/v1alpha1 kind: ApigeeRoute metadata: name: ROUTE_NAME namespace: APIGEE_NAMESPACE spec: hostnames: - "*" ports: - number: 443 protocol: HTTPS tls: credentialName: CREDENTIAL_NAME mode: SIMPLE #optional minProtocolVersion: TLS_AUTO selector: app: apigee-ingressgateway enableNonSniClient: true
ここで
- ROUTE_NAME は、カスタム リソース(CR)に付ける名前です。
- CREDENTIAL_NAME は、仮想ホストの TLS 認証情報が格納されているクラスタにデプロイされる Kubernetes Secret の名前です。認証情報名は、次の
kubectl
コマンドで確認できます。kubectl -n APIGEE_NAMESPACE get ApigeeRoutes -o=yaml | grep credentialName
hostnames
にはワイルドカード * を設定する必要があります。
- オーバーライド ファイルを開き、次の手順で説明する変更を加えます。
- 環境グループごとに、ApigeeRoute 名を
additionalGateways
プロパティに追加します。次に例を示します。virtualhosts: - name: default sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.pem additionalGateways: ["ROUTE_NAME"]
- CRD ファイルを保存します。例:
ApigeeRoute.yaml
- CRD をクラスタに適用します。
kubectl apply -f ApigeeRoute.yaml -n APIGEE_NAMESPACE
- 変更を
virtualhosts
に適用します。シェルで $ENV_GROUP 環境変数を設定している場合は、次のコマンドで使用できます。helm upgrade $ENV_GROUP apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=$ENV_GROUP \ -f OVERRIDES_FILE.yaml
使用上の注意
- クラスタに複数の組織が存在する場合
Ingress は特定のポート(443)のクラスタレベルにあり、ApigeeRoute CRD に使用できる鍵 / 証明書ペアは 1 つしかないため、すべての組織が同じ鍵 / 証明書ペアを共有する必要があります。
- クラスタに複数の環境グループがある場合に仮想ホストで同じ鍵 / 証明書ペアを共有できるかどうか
あらゆる環境グループのすべてのホスト名で同じ鍵 / 証明書ペアを使用する必要があります。
- ゲートウェイではなく ApigeeRoute を作成する理由
ApigeeRoute は Apigee で検証できますが、ゲートウェイ(Istio CRD)は検証できません。技術的にはゲートウェイも検証できますが、検証 Webhook を通じて潜在的な構成ミスを回避できます。
- Apigee で SNI 以外のクライアントを構成するにはどうすればよいですか?
Apigee インスタンスが Google ロードバランサを介して公開されている場合、ロード バランシングのドキュメントで説明されているように、ロードバランサは SNI 以外のクライアントをサポートします。それ以外の場合、内部 PSC エンドポイントまたは VPC を介して Apigee インスタンスを公開している場合、デフォルトでは Apigee インスタンスは SNI 以外のクライアントをサポートします。