IBM Cloud Docs
ポッド・セキュリティーのアップグレードの前提条件が原因でクラスターのアップグレードが失敗するのはなぜですか?

ポッド・セキュリティーのアップグレードの前提条件が原因でクラスターのアップグレードが失敗するのはなぜですか?

IBM Cloud Kubernetes Service を Kubernetes バージョン 1.24 からバージョン 1.25にアップグレードすると、アップグレードが失敗し、以下の例のようなエラー・メッセージが表示されます。

Version update canceled. CAE009: Cannot complete cluster master operations because the cluster does not pass Pod Security upgrade prerequisites. Reason: [ClusterRoleBinding 'restricted-psp-user' does not have expected subjects]. For more information, see the troubleshooting docs: 'https://ibm.biz/master_pod_security_upgrade_iks_125'

Kubernetes PodSecurityPolicy アドミッション・コントローラーは、 Kubernetes 1.25 で削除され、新しいポッド・セキュリティー・アドミッション・コントローラーに置き換えられました。

IBM Cloud Kubernetes Service クラスターをバージョン 1.24 からバージョン 1.25に安全にアップグレードするには、クラスター PodSecurityPolicies (PSP) および関連する役割ベースのアクセス制御が以下の前提条件を満たしている必要があります。

  • 5 つの IBM Cloud 定義済み PSP を超える PSP は存在できません。
  • すべてのユーザーおよびサービス・アカウントに IBM Cloud 定義済み特権および制限付き PSP を使用する権限を付与する IBM Cloud 定義済みクラスター役割バインディング。

これらの前提条件により、クラスターのバージョン 1.24 PodSecurityPolicy 構成がバージョン 1.25 ポッド・セキュリティー・アドミッション構成と同等であり、ポッド・セキュリティー・アドミッションへのアップグレードおよび切り替えによって既存のアプリケーションが中断されないことが保証されます。 これらの前提条件は、サード・パーティーのポッド・セキュリティー・プロバイダーの使用を妨げるものではないことに注意してください。

開始前に

ポッド・セキュリティー・アドミッションにマイグレーションする準備ができていない場合は、クラスター・マスターのリフレッシュを実行して状況メッセージをクリアできます。

ポッド・セキュリティー・アドミッションのアップグレードの前提条件アクションを既に実行している場合、エラー・メッセージには、対処する必要がある IBM Cloud Kubernetes Service 定義済みリソースに対するアクションの欠落または予期しない変更が示されます。 表示されているメッセージに基づいて、以下の手順を実行します。

取得できませんでした。 PodSecurityPolicies

  1. PSPを入手するためのコマンドを実行します。
    kubectl get podsecuritypolicies
    
  2. エラーがない場合は、クラスター・マスターのアップグレードを再試行してください。

IBM PodSecurityPolicy 以外が見つかりました

削除する必要がある追加の PSP があります。

クラスターをバージョン 1.25にアップグレードする前に、以下の PSP のみが存在することを確認してください。

  • ibm-privileged-psp
  • ibm-anyuid-psp
  • ibm-anyuid-hostpath-psp
  • ibm-anyuid-hostaccess-psp
  • ibm-restricted-psp
  1. PSP をリストします。

    kubectl get podsecuritypolicies
    
  2. 追加の PodSecurityPolicy が使用されていない場合は、削除してください。 追加のポッド・セキュリティー・ポリシーがある場合は、 マイグレーション・ガイドを確認 してください。

    kubectl delete podsecuritypolicies PSP
    
  3. クラスターのアップグレードを再試行します。

ClusterRoleBinding 特権PSPユーザーを取得できませんでした

このメッセージは、 privileged-psp-user クラスター役割バインディングが存在しないか、他の何らかのエラーによりアップグレード操作でリソースを読み取ることができなかったことを示します。

  1. リソースをリストします。
    kubectl get clusterrolebindings privileged-psp-user
    
  2. NotFound エラーが発生した場合は、 privileged-psp-user クラスター役割バインディング を作成または更新します。

ClusterRoleBinding privileged-psp-user 期待通りの結果にならない roleRef

このエラーは、予期しない変更を示し、クラスター役割バインディングが誤ったクラスター役割を参照していることを示します。

  1. クラスタロールのバインドを削除します。

    kubectl delete clusterrolebinding privileged-psp-user
    
  2. privileged-psp-user クラスター役割バインディング を作成します。

ClusterRoleBinding privileged-psp-userは期待される対象を持っていません

この変更が意図的なものであった場合は、まず、 クラスター役割バインディング を使用してアプリを実行できるかどうかを判別する必要があります。 可能な場合は、restricted-psp-user クラスター役割バインディング を作成または更新します。

ClusterRoleBinding を取得できませんでした。 restricted-psp-user

このメッセージは、 restricted-psp-user クラスター役割バインディングが存在しないか、その他の何らかのエラーが原因でアップグレード操作がリソースを読み取れなかったことを示します。

  1. restricted-psp-user クラスター役割バインディングの詳細を取得します。
    kubectl get clusterrolebindings restricted-psp-user
    
  2. NotFound エラーが発生した場合は、restricted-psp-user クラスター役割バインディング を作成または更新します。

ClusterRoleBinding restricted-psp-user 期待通りの結果にならない roleRef

このエラーは、予期しない変更であり、クラスター役割バインディングが誤ったクラスター役割を参照していることを示します。

roleRef を変更するには、以下の手順に従ってください。

  1. クラスタロールのバインドを削除します。
    kubectl delete clusterrolebinding restricted-psp-user
    
  2. restricted-psp-user クラスター役割バインディング を作成または更新します。

ClusterRoleBinding restricted-psp-userは期待されるサブジェクトを持っていません

この変更が意図的なものであった場合は、まず、 クラスター役割バインディング を使用してアプリケーションを適切に実行できるかどうかを判別する必要があります。

次に、restricted-psp-user クラスター役割バインディング を作成または更新します。

privileged-psp-user の作成または更新 ClusterRoleBinding

以下のコマンドを実行して、 privileged-psp-user クラスター役割バインディングを作成または更新します。

kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: privileged-psp-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: ibm-privileged-psp-user
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:masters
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:nodes
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:serviceaccounts
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:authenticated
EOF

restricted-psp-user クラスター役割バインディングの作成

restricted-psp-user ClusterRoleBinding を新規作成または更新するには、以下のコマンドを実行してください。

kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: restricted-psp-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: ibm-restricted-psp-user
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:masters
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:nodes
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:serviceaccounts
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:authenticated
EOF