Kubernetesインストール後、Adminアカウントをみんなで共有する運用はありえないので、最低限Namespace毎に権限を絞る方法をメモ。
以下、RBACが有効になっていること前提。
GKEの場合、“Legacy Authorization”をDisabledにする必要がある。
bobyというServiceAccountがblogというNamespaceでのみ開発できるようにするケースで説明。(自分の環境向けにはbodyとblogを読みかえれば良い。)
Namespace作成。
kubectl create namespace blog
ServiceAccountを作成すると同時にこのServiceAccountにRoleBindingを作成。BindするRoleまたはClusterRoleはここでは雑にClusterRoleのeditにする。(もう少し絞りたい場合はドキュメント参照)
上記を実現するため、次のコマンドでblog-boby.ymlを作成する。
cat <<EOF > blog-boby.yml
apiVersion: v1
kind: ServiceAccount
metadata:
name: boby-sa
namespace: blog
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: boby-rb
namespace: blog
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: edit
subjects:
- kind: ServiceAccount
name: boby-sa
EOF
設定する。
kubectl apply -f blog-boby.yml
このServiceAccount用のconfigファイルを生成するヘルパースクリプトとして、zlabjp/kubernetes-scriptsで提供されているcreate-kubeconfigを使います。
curl -LJOs https://github.com/zlabjp/kubernetes-scripts/raw/master/create-kubeconfig && chmod +x create-kubeconfig && sudo mv create-kubeconfig /usr/local/bin/
config作成。
create-kubeconfig boby-sa -n blog > config
環境変数KUBECONFIGにこのファイルパスを指定して動作確認。
$ KUBECONFIG=config kubectl get pod
No resources found.
$ KUBECONFIG=config kubectl auth can-i create pod
yes
$ KUBECONFIG=config kubectl get pod -n kube-system
Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:blog:boby-sa" cannot list pods in the namespace "kube-system": Unknown user "system:serviceaccount:blog:boby-sa"
$ KUBECONFIG=config kubectl auth can-i create pod -n kube-system
no - Unknown user "system:serviceaccount:blog:boby-sa"
Unable to connect to the server: x509: certificate is valid for kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster.local, not localhostというようなエラーが出る場合は、
configファイルのcertificate-authority-data: ...の行を削除して、insecure-skip-tls-verify: trueに変える。
つまり次のようにする。# ... clusters: - cluster: insecure-skip-tls-verify: true server: https://your-master-ip-or-host:8443 name: foobar # ...
動作確認できたら、このファイルを開発者に渡し、~/.kube/configにコピーしてもらう。
cp config ~/.kube/config
複数のNamespaceにBindしたい場合は、RoleBindingを複数定義する。
ServiceAccountおよびRoleBindingを削除したい場合は、
kubectl delete -f blog-boby.yml
CFCR (Cloud Foundry Container Runtime) 0.14.0ではOpenID Connect対応が入るはずなので、
リリースされたらUAAとの連携を行う。
