ImagePullSecretの割り当て

認証がかかったコンテナリポジトリに置かれたイメージを取得するためにImagePullSecretsを設定します。既存のサービスアカウントにImagePullSecretを設定する場合には、kubectl patchコマンドを利用します。サービスアカウントの作成時にマニフェストに指定することもできます。

コンテナレジストリにアクセスするための認証情報でSecretを作成し、ServiceAccountのImagePullSecretに設定します。


# Secretの作成
kubectl create secret docker-registry regcred
--docker-server=
--docker-username= 
--docker-password= 
--docker-email=

# ServiceAccount (default) に imagePullSecretsの設定
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "regcred"}]}'

ServiceAccountへのRoleの割り当て

ServiceAccountにRoleを割り当てると、同じNamespaceにあるPodはそのロールに割り当てられている権限が行使できるようになります。myspaceというNamespaceにmyrobotというServiceAccountを作成して、Podの一覧ができるロールを割り当ててみましょう。

下記のコマンドを実行してmyspaceというNamespaceにサービスアカウントを作成します。


kubectl apply -f - << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: myrobot
  namespace: myspace
EOF

次に、Podのget, list, watchができるpod-readerというロールを作成します。


kubectl apply -f - << EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: myspace
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]
EOF

最後に、myrobotというサービスアカウントにpod-readerロールを割り当てます。


kubectl apply -f - << EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: myspace 
subjects:
- kind: ServiceAccount
  name: myrobot
  namespace: myspace
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io
EOF

これでmyrobotというServiceAccountのPodのlist/get/watchをする権限が割り当てられました。 kubectl auth can-i get pods --as system:serviceaccount:myspace:myrobot コマンドで、割り当たっているかどうかをを確認することができます。