セキュリティ・コンテキスト制約(SCC)が原因で、Podがpermission deniedエラーでビルドされないのはなぜですか?
仮想プライベートクラウド クラシック・インフラストラクチャー
ポッドを構築または実行するときに、セキュリティコンテキスト制約(SCC)に関連するパーミッション拒否エラーを解決する方法を学びます。
セキュリティー・コンテキスト制約 (SCC) を使用するシステム・ポッドまたは他のポッドが操作の再試行を繰り返しますが、「permission denied」エラーで失敗します。 例えば、内部の image-registry ポッドにログインして、 docker push コマンドを実行しようとするかもしれない。
イメージを内部レジストリにプッシュする際のエラーメッセージの例。
error: build error: Failed to push image: error copying layers and metadata
ポッドがSCCを使用しているか、SCCを使用するシステムグループに正しい権限なしで属している可能性があります。 oc adm policy add-scc-to-group <scc> system:<group> 、SCCにシステムグループを追加したことがあるかもしれません。
ポッドがボリュームをマウントすると、SCC によって許可されるポッドの権限では、そのボリュームのデータの読み書きをポッドに許可できなくなる場合があります。
例えば、内部レジストリーは、イメージのデータを読み書きするボリュームをファイル・ストレージ・インスタンスにマウントします。 内部レジストリーが属する system:authenticated グループが SCC を restricted から anyuid に変更した場合は、ポッドが異なる UID で実行されます。 UID が異なるために、内部レジストリー・ポッドは、ストレージ・デバイスとの間でイメージをプッシュ/プルできなくなります。
ポッドの SCC 許可を変更します。
-
ポッドを記述し、Annotations セクションで
openshift.io/scc: <scc>セキュリティー・コンテキスト制約を確認します。oc describe pod -n <project> <pod>出力例
NAME: image-registry-1234567 Namespace: openshift-image-registry Priority: 2000000000 PriorityClassName: system-cluster-critical Node: 10.xxx.xx.xxx/10.xxx.xx.xxx Start Time: Wed, 19 Feb 2020 15:38:53 -0500 Labels: docker-registry=default Annotations: openshift.io/scc: anyuid -
セキュリティー・コンテキスト制約の詳細を表示し、**「Access」**セクションでユーザーおよびグループを確認します。
oc describe scc <scc>出力例
NAME: anyuid Priority: <none> Access: Users: <none> Groups: system:authenticated -
ユーザーまたはグループが SCC の許可を持たないようにするには、SCC からユーザーまたはグループを削除します。 詳しくは、クラスターに設定される Red Hat OpenShift および IBM Cloud のデフォルトの SCC を参照してください。
oc adm policy remove-scc-from-group <scc> <(user|group)> -
適切な権限が含まれている SCC にユーザーまたはグループを追加します。
oc adm policy add-scc-to-group <scc> <(user|group)> -
ポッドを削除して、新しい SCC 権限でポッドが再スケジュールされるようにします。
oc delete pod -n <project> <pod>