現在は、Apigee と Apigee ハイブリッドのドキュメントが表示されています。
Apigee Edge ドキュメントを表示する
症状
Apigee ハイブリッドでは、次のような現象が 1 つ以上発生します。
- ランタイム トラフィックが停止した
- TLS 接続エラーで API リクエストが失敗する
- 想定される
istio-ingressgateway
からの TLS 証明書を API クライアントが受信しない
エラー メッセージ
API 呼び出しが失敗し、次のような TLS エラーが表示されます。
* TLSv1.2 (OUT), TLS handshake, Client hello (1): * LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to example.apis.com:443 * Closing connection 0 curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to example.apis.com:443
考えられる原因
原因 | 説明 |
---|---|
Ingress に K8S Secret がない | org-envgroup の K8S Secret が istio-system Namespace にありません。 |
K8S Secret
Apigee ハイブリッドでは、環境グループを使用して ingress
トラフィックの仮想ホストを構成します。TLS 証明書と鍵ファイルは、overrides.yaml
ファイル内の環境グループごとに構成されます。
overrides.yaml
での TLS 証明書と鍵ファイルの構成例:
org: my-hybrid-project virtualhosts: - name: uat-group sslCertPath: ./certs/uat-group-keystore.pem sslKeyPath: ./certs/uat-group-keystore.key - name: prod-group sslCertPath: ./certs/prod-group-keystore.pem sslKeyPath: ./certs/prod-group-keystore.key
Apigee ハイブリッド ランタイムのインストール中、これらの TLS 鍵と証明書は istio-system
Namespace の K8S Secret に保存されます。
たとえば、上記の overrides.yaml
ファイルの構成では、次の K8S Secret が作成されます。
kubectl -n istio-system get secrets
NAME TYPE DATA AGE my-hybrid-project-prod-group Opaque 2 15h my-hybrid-project-uat-group Opaque 2 38m
これらの K8S Secret には、必要な TLS 鍵と証明書が保存されるため、そのままの状態で維持してください。ただし、次のような場合は、この Secret が削除される可能性があります。
- ASM の再インストール
istio-system
Namespace の削除- 誤って削除した場合
原因: Ingress に Secret がない
診断
istio-system
Namespace 内のistio-ingressgateway
Pod のログを分析し、エラーがあるかどうかを確認します。- 次のようなエラーが発生することがあります。
2021-01-04T23:37:14.542520Z error secretfetcher cannot find secret MY_HYBRID_PROJECT-UAT_GROUP and cannot find fallback secret gateway-fallback
ここで
MY_HYBRID_PROJECT は Apigee ハイブリッド組織の名前です。
UAT_GROUP は、環境グループの名前です。
前述のエラーは、
secretfetcher
が Apigee ハイブリッド組織の上の環境グループの K8S Secret を見つけられなかったことを示します。 - 次のコマンドを使用して、K8S Secret が実際に欠落していることを確認します。
kubectl -n istio-system get secrets <no output>
上の出力例は、K8S Secret がないことを示しています。これらは、上記の K8S Secret で説明した状況のいずれかのために削除された可能性があります。
解決策
次の手順に沿って、overrides.yaml
ファイルの TLS 証明書と鍵ファイル情報を使用して、欠落している K8S Secret を再作成します。
- 次のコマンドを実行して、欠落している Secret を再作成します。
apigeectl apply -f overrides/overrides.yaml --settings virtualhosts
- 上のコマンドの出力には、Secret が作成されたことが示されます。
my-hybrid-project-prod-group created
- 次のコマンドを使用して、K8S Secret が正常に作成されたことを確認します。
kubectl -n istio-system get secrets
NAME TYPE DATA AGE my-hybrid-project-prod-group Opaque 2 15h my-hybrid-project-uat-group Opaque 2 38m
診断情報の収集が必要な場合
上記の手順でも問題が解決しない場合は、次の診断情報を収集して Apigee サポートに連絡してください。
- Google Cloud プロジェクト ID。
- Apigee ハイブリッド組織の名前
- Kubernetes クラスタ名
- Google Cloud プロジェクト名(Kubernetes クラスタが別の Google Cloud プロジェクトにある場合)
overrides.yaml
ファイルistio-system
Namespace の各istio-ingressgateway
Pod からログを収集します。kubectl logs NAME_OF_ISTIO_INGRESSGATEWAY_POD -n istio-system > /tmp/NAME_OF_ISTIO_INGRESSGATEWAY_POD.log
istio-system
Namespace の Secret のリストを収集します。kubectl -n istio-system get secrets
istio-system
Namespace 内のサービスのリストを収集します。kubectl get svc -n istio-system
istio-system
Namespace 内の各 Pod の説明を収集します。kubectl describe pod NAME_OF_ISTIO_INGRESSGATEWAY_POD -n istio-system > /tmp/NAME_OF_ISTIO_INGRESSGATEWAY_POD.yaml