このドキュメントでは、GKE Identity Service のユーザー アクセスに関する問題のトラブルシューティングについて説明します。
gcloud anthos create-login-config が clientconfig を取得できない
この問題は、次のいずれかのケースで発生します。
gcloud anthos create-login-configに渡された kubeconfig ファイルが正しくない。- ClientConfig カスタム リソースがクラスタに存在しない(GKE Identity Service がクラスタにインストールされていない)。
エラー メッセージ
failed to get clientconfig default in namespace kube-public
解決策
この問題を解決するには、次の操作を行います。
- クラスタに適切な kubeconfig ファイルがあることを確認してください。
ClientConfig カスタム リソースがクラスタ内にあるかどうかを確認するには、次のコマンドを実行します。
kubectl --kubeconfig KUBECONFIG get clientconfig default -n kube-public
ClientConfig がクラスタに存在しない場合は、クラスタに GKE Identity Service をインストールして構成します。クラスタの設定オプションの詳細については、クラスタの設定オプションをご覧ください。
クラスタ名が重複しているため gcloud anthos create-login-config が失敗する
この問題は、このクラスタのログイン構成がすでに含まれているファイルに、クラスタのログイン構成を作成しようとした場合に発生します。
エラー メッセージ
error merging with file FILENAME because FILENAME contains a
cluster with the same name as the one read from KUBECONFIG.
解決策
この問題を解決するには、--output フラグを使用して新しい宛先ファイルを指定します。
--output を指定しない場合、このログイン構成データは、現在のディレクトリの kubectl-anthos-config.yaml という名前のファイルに書き込まれます。
gcloud anthos auth login が proxyconnect tcp で失敗する
この問題は、https_proxy または HTTPS_PROXY の環境変数の構成にエラーがある場合に発生します。環境変数に https:// が指定されている場合、SOCK5 などの他のプロトコルを使用して HTTPS 接続を処理するようにプロキシが構成されると、GoLang HTTP クライアント ライブラリが失敗する可能性があります。
エラー メッセージ
proxyconnect tcp: tls: first record does not look like a TLS handshake
解決策
この問題を解決するには、https:// prefix を省略するように、https_proxy 環境変数と HTTPS_PROXY 環境変数を変更します。Windows で、システム環境変数を変更します。たとえば、https_proxy 環境変数の値を https://webproxy.example.com:8000 から webproxy.example.com:8000 に変更します。
gcloud anthos auth login によって生成された kubeconfig を使用すると、クラスタへのアクセスに失敗する
この問題は、次のいずれかの理由で Kubernetes API サーバーがユーザーを認可できない場合に発生します。
gcloud anthos auth loginコマンドを使用してログインする際に使用される構成にエラーがあります。- ユーザーに必要な RBAC ポリシーが正しくないか、存在しません。
エラー メッセージ
Unauthorized
解決策
この問題を解決するには、次の操作を行います。
ログインに使用される構成を確認します。
OIDC 構成
ユーザー クラスタ構成ファイルの
authentication.oidcセクションには、Kubernetes API サーバーの--oidc-group-claimフラグと--oidc-username-claimフラグの設定に使用されるgroupフィールドとusernameフィールドがあります。API サーバーにユーザーの ID トークンが渡されると、トークンは GKE Identity サービスに転送されます。これにより、抽出されたgroup-claimとusername-claimが API サーバーに返されます。API サーバーはレスポンスを使用して、対応するグループまたはユーザーに正しい権限が付与されていることを確認します。クラスタ構成ファイルの
authentication.oidcセクションでgroupとuserに設定されたクレームが ID トークンに存在することを確認します。適用された RBAC ポリシーを確認します。
GKE Identity Service に適切な RBAC ポリシーを設定する方法については、ロールベース アクセス制御(RBAC)を設定するをご覧ください。
OIDC プロバイダでグループの RBAC が機能しない
ID トークンにグループ情報があるかどうかを確認する
gcloud anthos auth loginコマンドを実行して OIDC 認証フローを開始すると、ID トークンがkubeconfigファイルのid-tokenフィールドに保存されます。jwt.io を使用して ID トークンをデコードし、想定どおりにユーザーのグループ情報が含まれていることを確認します。ID トークンにユーザーのグループ情報が含まれていない場合は、OIDC プロバイダのドキュメントに従って、グループ情報を返すように OIDC プロバイダを正しく構成します。たとえば、Okta Identity プロバイダの OIDC 構成を使用している場合は、Okta Identity プロバイダのドキュメントに従って ID トークンでグループを構成します。
ID トークンにグループ情報が含まれている場合は、ID トークンのグループ情報キーが、
oidcセクションで構成されているgroupsClaimフィールドと一致しているかどうかを確認します。たとえば、ID トークンに
groupsキーのグループ情報が含まれている場合:"groups" : ["group1", "group2" ...]この場合、
groupsClaimフィールドの値はoidcセクションのgroupsにする必要があります。oidcセクションの構成を変更した後は、必ずユーザー アクセスの設定とクラスタへのアクセスに記載されている手順を再度実施してください。
ID プロバイダのトラブルシューティング
GKE クラスタで OIDC や LDAP を使用する際に問題が発生した場合は、このセクションの手順に沿って GKE Identity Service のトラブルシューティングを行い、ID プロバイダの構成に問題があるかどうかを判断してください。
GKE Identity Service デバッグログを有効にする
クラスタで ID 関連の問題をトラブルシューティングするには、GKE Identity Service のデバッグログを有効にします。
kubectl patchを使用して既存のクラスタにパッチを適用します。kubectl patch deployment ais \ -n anthos-identity-service --type=json \ -p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value":"--vmodule=cloud/identity/hybrid/charon/*=LOG_LEVEL"}]' \ --kubeconfig KUBECONFIG次のように置き換えます。
LOG_LEVEL: 最も詳細なログの場合、トラブルシューティング時に、この値をレベル3に設定します。KUBECONFIG: ユーザー クラスタの kubeconfig ファイルへのパス。
GKE Identity Service のコンテナログを確認する
GKE Identity Service コンテナログでエラーや警告がないか確認します。
ログを確認するには、
kubectl logsを使用します。kubectl logs -f -l k8s-app=ais \ -n anthos-identity-service \ --kubeconfig KUBECONFIGKUBECONFIGは、ユーザー クラスタ kubeconfig ファイルへのパスに置き換えます。
GKE Identity Service Pod を再起動する
コンテナログに問題が表示された場合は、GKE Identity Service Pod を再起動します。
GKE Identity Service Pod を再起動するには、既存の Pod を削除します。置き換え用として新しい Pod が自動的に作成されます。
kubectl delete pod -l k8s-app=ais \ -n anthos-identity-service \ --kubeconfig KUBECONFIGKUBECONFIGは、ユーザー クラスタ kubeconfig ファイルへのパスに置き換えます。
ID プロバイダへの接続をトラブルシューティングする
GKE Identity Service Pod が正しく実行されている場合は、リモート ID プロバイダへの接続をテストします。
GKE Identity Service Pod と同じ Namespace で busybox Pod を起動します。
kubectl run curl --image=radial/busyboxplus:curl \ -n anthos-identity-service -- sleep 3000 \ --kubeconfig KUBECONFIGKUBECONFIGは、ユーザー クラスタ kubeconfig ファイルへのパスに置き換えます。ディスカバリ URL を取得できるかどうかを確認するには、busybox Pod で実行し、
curlコマンドを実行します。kubectl exec pod/curl -n anthos-identity-service -- \ curl ISSUER_URL \ --kubeconfig KUBECONFIG次のように置き換えます。
ISSUER_URL: ID プロバイダの発行元 URL。KUBECONFIG: ユーザー クラスタの kubeconfig ファイルへのパス。
正常なレスポンスは、詳細な ID プロバイダ エンドポイントを含む JSON 結果です。
上記のコマンドで想定どおりの結果が返されない場合は、ID プロバイダの管理者にお問い合わせください。
Google Distributed Cloud 管理クラスタで LDAP ログインが機能しない
現在、LDAP は Google Distributed Cloud ユーザー クラスタでのみサポートされています。