Kubernetes dashboardアクセスユーザに権限制御を追加
8007 ワード
Kubernetes dashboardアクセスユーザに権限制御を追加
[TOC]
1.需要
開発環境で開発者にアプリケーション配置管理権限を作成し、dashboardのtokenとkubeconfigファイルを使用してログインし、開発者マシンにインストール
2.シナリオ
私たちはdashboardとkubeappsを使ったので、彼らのrbac権限はすべて割り当てなければなりません.namespaceの作成:
3.実現
3.1 dashboard権限の割当て
3.2 kubeapps権限の割当て
token取得:
3.3 kubeconfigの生成
token方式でkube-apiserverにアクセス
注意kubeconfigを構成するときに既存の構成を上書きしないように経路を指定する
4.テスト検証
Windows
コマンドのダウンロード:https://storage.googleapis.com/kubernetes-release/release/v1.12.0/bin/windows/amd64/kubectl.exe
次に、システムPATHディレクトリの下に配置します.たとえば、
kubeconfigファイルkubeconfigファイル、すなわち、上のファイルで生成されたconfigファイル.ファイル名は
参考資料:[1]https://kubernetes.io/docs/reference/access-authn-authz/rbac/[2] https://blog.qikqiak.com/post/add-authorization-for-kubernetes-dashboard/[3] https://github.com/kubeapps/kubeapps/blob/master/docs/user/access-control.md [4] https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#config[5] https://kubernetes.io/docs/tasks/tools/install-kubectl/#configure-kubectl
[TOC]
1.需要
開発環境で開発者にアプリケーション配置管理権限を作成し、dashboardのtokenとkubeconfigファイルを使用してログインし、開発者マシンにインストール
kubectl
コマンド、使用可能kubectl port-forward
コマンド.2.シナリオ
私たちはdashboardとkubeappsを使ったので、彼らのrbac権限はすべて割り当てなければなりません.namespaceの作成:
dev
ServiceAccountの作成:dev-user1
対応する権限を与え、ServiceAccountをバインドします.3.実現
3.1 dashboard権限の割当て
kubectl apply -f dev-user1.yaml
---
# ServiceAccount
apiVersion: v1
kind: ServiceAccount
metadata:
name: dev-user1
namespace: dev
---
# role
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: dev
name: role-dev-user1
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch", "delete", "update", "patch"]
- apiGroups: [""]
resources: ["pods/portforward", "pods/proxy"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: [""]
resources: ["pods/log"]
verbs: ["get", "list", "watch", "delete"]
- apiGroups: ["extensions", "apps"]
resources: ["deployments"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "watch", "list"]
- apiGroups: [""]
resources: ["events"]
verbs: ["get", "watch", "list"]
- apiGroups: ["apps", "extensions"]
resources: ["replicasets"]
verbs: ["get", "watch", "list", "create", "update", "pathch", "delete"]
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["get", "watch", "list", "create", "update", "pathch", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "watch", "list"]
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
- apiGroups: [""]
resources: ["services"]
verbs: ["get", "watch", "list", "create", "update", "pathch", "delete"]
- apiGroups: ["extensions"]
resources: ["ingresses"]
verbs: ["get", "watch", "list"]
- apiGroups: ["apps"]
resources: ["daemonsets"]
verbs: ["get", "watch", "list"]
- apiGroups: ["batch"]
resources: ["jobs"]
verbs: ["get", "watch", "list"]
- apiGroups: ["batch"]
resources: ["cronjobs"]
verbs: ["get", "watch", "list"]
- apiGroups: [""]
resources: ["replicationcontrollers"]
verbs: ["get", "watch", "list"]
- apiGroups: ["apps"]
resources: ["statefulsets"]
verbs: ["get", "watch", "list"]
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "watch", "list"]
---
# role bind
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: role-bind-dev-user1
namespace: dev
subjects:
- kind: ServiceAccount
name: dev-user1
namespace: dev
roleRef:
kind: Role
name: role-dev-user1
apiGroup: rbac.authorization.k8s.io
#---
## clusterrole
#kind: ClusterRole
#apiVersion: rbac.authorization.k8s.io/v1
#metadata:
# namespace: dev
# name: clusterrole-dev-user1
#rules:
#- apiGroups: [""]
# resources: ["namespaces"]
# verbs: ["get", "watch", "list"]
#
#---
## clusterrole bind
#kind: ClusterRoleBinding
#apiVersion: rbac.authorization.k8s.io/v1
#metadata:
# name: clusterrole-bind-dev-user1
# namespace: dev
#subjects:
#- kind: ServiceAccount
# name: dev-user1
# namespace: dev
#roleRef:
# kind: ClusterRole
# name: clusterrole-dev-user1
# apiGroup: rbac.authorization.k8s.io
3.2 kubeapps権限の割当て
kubectl apply -f https://raw.githubusercontent.com/kubeapps/kubeapps/master/docs/user/manifests/kubeapps-applications-read.yaml
kubectl create -n dev rolebinding dev-user1-view \
--clusterrole=kubeapps-applications-read \
--serviceaccount dev:dev-user1
export KUBEAPPS_NAMESPACE=kubeapps
kubectl apply -n $KUBEAPPS_NAMESPACE -f https://raw.githubusercontent.com/kubeapps/kubeapps/master/docs/user/manifests/kubeapps-repositories-read.yaml
kubectl create -n dev rolebinding dev-user1-edit \
--clusterrole=edit \
--serviceaccount dev:dev-user1
kubectl create -n $KUBEAPPS_NAMESPACE rolebinding dev1-user1-kubeapps-repositories-read \
--role=kubeapps-repositories-read \
--serviceaccount dev:dev-user1
token取得:
kubectl get -n dev secret $(kubectl get -n dev serviceaccount dev-user1 -o jsonpath='{.secrets[].name}') -o jsonpath='{.data.token}' | base64 --decode
3.3 kubeconfigの生成
token方式でkube-apiserverにアクセス
# kubectl config
#
kubectl config set-cluster kubernetes \
--insecure-skip-tls-verify=true \
--server="https://192.168.105.99:8443"
#
kubectl config set-credentials dev-user1 \
--token=' token'
#
kubectl config set-context kubernetes \
--cluster=kubernetes \
--user=dev-user1 \
--namespace=dev
#
kubectl config use-context kubernetes
注意kubeconfigを構成するときに既存の構成を上書きしないように経路を指定する
--kubeconfig=configpath
ファイルconfigを直接作成し、内容を変更することもできます.apiVersion: v1
clusters:
- cluster:
insecure-skip-tls-verify: true
server: https://192.168.105.99:8443
name: kubernetes
contexts:
- context:
cluster: kubernetes
namespace: dev
user: dev-user1
name: kubernetes
current-context: kubernetes
kind: Config
preferences: {}
users:
- name: dev-user1
user:
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZXYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoiZGV2LXVzZXIxLXRva2VuLTJsbDlnIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZX291bnQubmFtZSI6ImRldi11c2VyMSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjdiY2Q4N2E1LWM0NGEtMTFlOC1iY2I5LTAwMGMyOWVhM2UzMCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZXY6ZGV2LXVzZXIxIn0.1M84CPHY-GoyeaRFyBcD49GTwG5o0HMhN8lVsH9GDiqdui-1ppyi3JMONRJ9aWdswEF7-wsb5d4MQEk-9z5yiVh2r8SMP0EhcUR5ierntzD1bwwwuYzDxE4vHAuPB1tTxM0fOL3H-BOjt68iBKmOtRJumx8LzSUleQiNBBqR1B_yRLqrO6yslw44WC432O5g1v
4.テスト検証
Windows
kubectl
コマンドインストールコマンドのダウンロード:https://storage.googleapis.com/kubernetes-release/release/v1.12.0/bin/windows/amd64/kubectl.exe
次に、システムPATHディレクトリの下に配置します.たとえば、
c:\Windows
コマンドを使用する場合は、cmd、powershell、または他のコマンドプロンプトラインツールを使用します.Git Bashを使用することをお勧めします.Gitがインストールされているため、このツールがインストールされています.kubeconfigファイルkubeconfigファイル、すなわち、上のファイルで生成されたconfigファイル.ファイル名は
config
、ファイルは~/.kube/下(~はユーザホームディレクトリ)に置かれます.kubectlコマンドはデフォルトでこのファイルを読み込むため、そうでない場合はkubectlコマンドを使用するたびにパラメータ--kubeconfig=configpath
で指定する必要があります.kubectl get pod -n dev
kubectl port-forward svc/dev-mysql-mysqlha 3306:3306 -n dev
参考資料:[1]https://kubernetes.io/docs/reference/access-authn-authz/rbac/[2] https://blog.qikqiak.com/post/add-authorization-for-kubernetes-dashboard/[3] https://github.com/kubeapps/kubeapps/blob/master/docs/user/access-control.md [4] https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#config[5] https://kubernetes.io/docs/tasks/tools/install-kubectl/#configure-kubectl