4.4. 認証プロキシー接続のトラブルシューティング
コンポーネントスコープのプロキシーで問題が発生した場合は、Operator の条件、イベント、および Pod の環境変数を確認することで、問題を診断して解決できます。
- プロキシー関連のオペレーターイベント
認証オペレータは、プロキシー設定の変更によって障害が発生した場合にイベントを発行します。最新のイベントを確認するには、以下のコマンドを実行してください。
$ oc get events -n openshift-authentication-operator --sort-by=.lastTimestampプロキシー接続エラーを参照する
、理由が OperatorStatusChanged のイベントを探してください。プロキシーの URL が正しいこと、プロキシーサーバーが稼働していること、およびクラスターノードがプロキシーにアクセスできることを確認してください。- 認証オペレーターがプロキシーエラーを報告する
接続拒否、DNS 解決エラー、TLS ハンドシェイクエラーなどのプロキシーレベルの障害が発生すると、
Available状態がFalse と報告されます。Degraded状態メッセージには、DegradedステータスがFalseのままであっても、ProxyConfigControllerサブコントローラーからの診断の詳細が含まれます。以下のコマンドを実行して、Operator のステータスを確認します。$ oc get clusteroperator authentication -o jsonpath='{.status.conditions}' | jq .出力例
[ { "type": "Available", "status": "False", "reason": "OAuthServerRouteEndpointAccessibleController_EndpointUnavailable", "message": "OAuthServerRouteEndpointAccessibleControllerAvailable: Get \"https://oauth-openshift.apps.example.com/healthz\": proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host" }, { "type": "Progressing", "status": "True", "reason": "OAuthServerDeployment_PodsUpdating", "message": "deployment/oauth-openshift: 3/3 pods have been updated to the latest generation and 1/3 pods are available" }, { "type": "Degraded", "status": "False", "reason": "AsExpected", "message": "ProxyConfigControllerDegraded: failed to reach endpoint with error: Get \"https://oauth-openshift.apps.example.com/healthz\": proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host" } ]プロキシーに接続できない場合、
利用可能の状態はFalse と表示されます。Degraded状態はFalse のままですが、メッセージにはProxyConfigControllerからのプロキシーエラーの詳細が含まれます。プロキシーの問題を診断する際は、両方の条件を確認してください。プロキシーサーバーが稼働していること、プロキシーの URL とポートが正しいこと、および
trustedCAconfig map に有効な PEM エンコード証明書が含まれていることを確認してください。- プロキシー設定ミスにより、全ユーザーがロックアウトされました。
プロキシーの設定ミスは、OAuth 認証を受けたすべてのユーザーを締め出す可能性があります。アクセスを回復するには:
-
kubeadmin の認証情報またはクライアント証明書認証を使用してログインしてください。どちらの方法も OAuth をバイパスします。 以下のコマンドを実行して、プロキシー設定を修正してください。
$ oc edit authentication.operator.openshift.io cluster認証オペレータが正常な状態に戻ったことを確認するには、次のコマンドを実行します。
$ oc get clusteroperator authentication出力例
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE authentication {product-version}.0 True False False 10m
-
- OAuth サーバーが CA バンドルを信頼していません
OAuth サーバーがプロキシー TLS 証明書を検証できない場合は、以下を確認してください。
-
config map は
openshift-configに存在し、有効な PEM エンコード証明書がキーca-bundle.crtの下にあります。 -
spec.proxy.trustedCA.nameの値は、実際の config map 名と一致します。 中間証明書を含め、認証局証明書チェーンは完了しています。
オペレーターは、
openshift-configからopenshift-authenticationへ config map を自動的に同期します。
-
config map は
- シングルノードの OpenShift Container Platform で認証が一時的に停止
-
プロキシー URL を変更すると、OAuth サーバーの再デプロイがトリガーされます。シングルノードデプロイメントの場合、レプリカが 1 つしか利用できないため、一時的なサービス停止が発生します。プロキシー URL の変更はメンテナンス時間中に行ってください。
trustedCAconfig map コンテンツの更新は、再デプロイなしでホットリロードされます。 - プロキシー経由での LDAP グループ同期が失敗
LDAP グループ同期
CronJobリソースは、認証 Operator によって管理されません。CronJobPod 仕様上で、プロキシー環境変数を個別に設定します。以下に例を示します。apiVersion: batch/v1 kind: CronJob metadata: name: ldap-group-sync spec: jobTemplate: spec: template: spec: containers: - name: sync env: - name: HTTPS_PROXY value: "http://proxy.example.com:3128"- クラスター全体のプロキシーとコンポーネントスコープのプロキシーの両方が設定済み
コンポーネントスコープのプロキシーは、認証コンポーネント用のクラスター全体のプロキシーを完全に置き換えます。どのプロキシーがアクティブになっているかを確認するには、次のコマンドを実行して OAuth サーバーの Pod 環境変数を調べます。
$ oc get deployment oauth-openshift -n openshift-authentication -o jsonpath='{.spec.template.spec.containers[0].env}' | jq .出力例
[ { "name": "HTTP_PROXY", "value": "http://proxy.example.com:3128" }, { "name": "HTTPS_PROXY", "value": "http://proxy.example.com:3128" }, { "name": "NO_PROXY", "value": ".cluster.local,.example.com,.svc,127.0.0.1,172.30.0.1,idp.internal.example.com,localhost" } ]NO_PROXY の値には、設定済みのエントリーと、自動的に追加されたクラスター内部のデフォルト値が含まれます。