视频来源:B站《(2022版)最新、最全、最详细的Kubernetes(K8s)教程,从K8s安装到实战一套搞定》
一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:(2022版)一套教程搞定k8s安装到实战 | 汇总_COCOgsta的博客-CSDN博客
基于角色的访问控制,Role Based Access Control。它是一种基于企业内个人角色来管理一些资源的访问方法。
- [root@k8s-master-lb ~]# more /usr/lib/systemd/system/kube-apiserver.service
- [Unit]
- Description=Kubernetes API Server
- Documentation=https://github.com/kubernetes/kubernetes
- After=network.target
-
- [Service]
- ExecStart=/usr/local/bin/kube-apiserver \
- --v=2 \
- --logtostderr=true \
- --allow-privileged=true \
- --bind-address=0.0.0.0 \
- --secure-port=6443 \
- --insecure-port=0 \
- --advertise-address=192.168.1.107 \
- --service-cluster-ip-range=10.96.0.0/12 \
- --service-node-port-range=30000-32767 \
- --etcd-servers=https://192.168.1.107:2379,https://192.168.1.108:2379,https://192.168.1.109:2379 \
- --etcd-cafile=/etc/etcd/ssl/etcd-ca.pem \
- --etcd-certfile=/etc/etcd/ssl/etcd.pem \
- --etcd-keyfile=/etc/etcd/ssl/etcd-key.pem \
- --client-ca-file=/etc/kubernetes/pki/ca.pem \
- --tls-cert-file=/etc/kubernetes/pki/apiserver.pem \
- --tls-private-key-file=/etc/kubernetes/pki/apiserver-key.pem \
- --kubelet-client-certificate=/etc/kubernetes/pki/apiserver.pem \
- --kubelet-client-key=/etc/kubernetes/pki/apiserver-key.pem \
- --service-account-key-file=/etc/kubernetes/pki/sa.pub \
- --service-account-signing-key-file=/etc/kubernetes/pki/sa.key \
- --service-account-issuer=https://kubernetes.default.svc.cluster.local \
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname \
- --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,ResourceQuota \
- --authorization-mode=Node,RBAC \
- --enable-bootstrap-token-auth=true \
- --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.pem \
- --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.pem \
- --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client-key.pem \
- --requestheader-allowed-names=aggregator \
- --requestheader-extra-headers-prefix=X-Remote-Group \
- --requestheader-username-headers=X-Remote-User
- # --token-auth-file=/etc/kubernetes/token.csv
-
- Restart=on-failure
- RestartSec=10s
- LimitNOFILE=65535
-
- [Install]
- WantedBy=multi-user.target
- [root@k8s-master-lb ~]#
- 复制代码
Jenkins使用基于角色的用户权限管理。
RBAC:4种顶级资源,Role、ClusterRole、RoleBinding、ClusterRoleBinding。
Role:角色,包含一组权限的规则。没有拒绝规则,只是附加允许。Namespace隔离,只作用于命名空间内。
- [root@k8s-master-lb ~]# kubectl get role -n ingress-nginx ingress-nginx -oyaml
- apiVersion: rbac.authorization.k8s.io/v1
- kind: Role
- metadata:
- creationTimestamp: "2022-08-20T04:59:54Z"
- labels:
- app.kubernetes.io/component: controller
- app.kubernetes.io/instance: ingress-nginx
- app.kubernetes.io/managed-by: Helm
- app.kubernetes.io/name: ingress-nginx
- app.kubernetes.io/version: 0.40.2
- helm.sh/chart: ingress-nginx-3.6.0
- managedFields:
- - apiVersion: rbac.authorization.k8s.io/v1
- fieldsType: FieldsV1
- fieldsV1:
- f:metadata:
- f:labels:
- .: {}
- f:app.kubernetes.io/component: {}
- f:app.kubernetes.io/instance: {}
- f:app.kubernetes.io/managed-by: {}
- f:app.kubernetes.io/name: {}
- f:app.kubernetes.io/version: {}
- f:helm.sh/chart: {}
- f:rules: {}
- manager: Go-http-client
- operation: Update
- time: "2022-08-20T04:59:54Z"
- name: ingress-nginx
- namespace: ingress-nginx
- resourceVersion: "461437"
- uid: b46670cc-21ac-4e7d-88bb-0cb14d815baa
- rules:
- - apiGroups:
- - ""
- resources:
- - namespaces
- verbs:
- - get
- - apiGroups:
- - ""
- resources:
- - configmaps
- - pods
- - secrets
- - endpoints
- verbs:
- - get
- - list
- - watch
- - apiGroups:
- - ""
- resources:
- - services
- verbs:
- - get
- - list
- - update
- - watch
- - apiGroups:
- - extensions
- - networking.k8s.io
- resources:
- - ingresses
- verbs:
- - get
- - list
- - watch
- - apiGroups:
- - extensions
- - networking.k8s.io
- resources:
- - ingresses/status
- verbs:
- - update
- - apiGroups:
- - networking.k8s.io
- resources:
- - ingressclasses
- verbs:
- - get
- - list
- - watch
- - apiGroups:
- - ""
- resourceNames:
- - ingress-controller-leader-nginx
- resources:
- - configmaps
- verbs:
- - get
- - update
- - apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - create
- - apiGroups:
- - ""
- resources:
- - endpoints
- verbs:
- - create
- - get
- - update
- - apiGroups:
- - ""
- resources:
- - events
- verbs:
- - create
- - patch
- [root@k8s-master-lb ~]#
- 复制代码
ClusterRole:和Role的区别,Role是只作用于命名空间内,作用于整个集群。
- [root@k8s-master-lb ~]# kubectl get clusterrole view -oyaml
- aggregationRule:
- clusterRoleSelectors:
- - matchLabels:
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- apiVersion: rbac.authorization.k8s.io/v1
- kind: ClusterRole
- metadata:
- annotations:
- rbac.authorization.kubernetes.io/autoupdate: "true"
- creationTimestamp: "2022-06-21T13:12:31Z"
- labels:
- kubernetes.io/bootstrapping: rbac-defaults
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- managedFields:
- - apiVersion: rbac.authorization.k8s.io/v1
- fieldsType: FieldsV1
- fieldsV1:
- f:aggregationRule:
- .: {}
- f:clusterRoleSelectors: {}
- f:metadata:
- f:annotations:
- .: {}
- f:rbac.authorization.kubernetes.io/autoupdate: {}
- f:labels:
- .: {}
- f:kubernetes.io/bootstrapping: {}
- f:rbac.authorization.k8s.io/aggregate-to-edit: {}
- manager: kube-apiserver
- operation: Update
- time: "2022-06-21T13:12:31Z"
- - apiVersion: rbac.authorization.k8s.io/v1
- fieldsType: FieldsV1
- fieldsV1:
- f:rules: {}
- manager: kube-controller-manager
- operation: Update
- time: "2022-06-21T13:16:31Z"
- name: view
- resourceVersion: "34722"
- uid: 709188e2-dc10-4fce-8c36-66caba981ed5
- rules:
- - apiGroups:
- - ""
- resources:
- - configmaps
- - endpoints
- - persistentvolumeclaims
- - persistentvolumeclaims/status
- - pods
- - replicationcontrollers
- - replicationcontrollers/scale
- - serviceaccounts
- - services
- - services/status
- verbs:
- - get
- - list
- - watch
- - apiGroups:
- - ""
- resources:
- - bindings
- - events
- - limitranges
- - namespaces/status
- - pods/log
- - pods/status
- - replicationcontrollers/status
- - resourcequotas
- - resourcequotas/status
- verbs:
- - get
- - list
- - watch
- - apiGroups:
- - ""
- resources:
- - namespaces
- verbs:
- - get
- - list
- - watch
- - apiGroups:
- - apps
- resources:
- - controllerrevisions
- - daemonsets
- - daemonsets/status
- - deployments
- - deployments/scale
- - deployments/status
- - replicasets
- - replicasets/scale
- - replicasets/status
- - statefulsets
- - statefulsets/scale
- - statefulsets/status
- verbs:
- - get
- - list
- - watch
- - apiGroups:
- - autoscaling
- resources:
- - horizontalpodautoscalers
- - horizontalpodautoscalers/status
- verbs:
- - get
- - list
- - watch
- - apiGroups:
- - batch
- resources:
- - cronjobs
- - cronjobs/status
- - jobs
- - jobs/status
- verbs:
- - get
- - list
- - watch
- - apiGroups:
- - extensions
- resources:
- - daemonsets
- - daemonsets/status
- - deployments
- - deployments/scale
- - deployments/status
- - ingresses
- - ingresses/status
- - networkpolicies
- - replicasets
- - replicasets/scale
- - replicasets/status
- - replicationcontrollers/scale
- verbs:
- - get
- - list
- - watch
- - apiGroups:
- - policy
- resources:
- - poddisruptionbudgets
- - poddisruptionbudgets/status
- verbs:
- - get
- - list
- - watch
- - apiGroups:
- - networking.k8s.io
- resources:
- - ingresses
- - ingresses/status
- - networkpolicies
- verbs:
- - get
- - list
- - watch
- - apiGroups:
- - metrics.k8s.io
- resources:
- - pods
- - nodes
- verbs:
- - get
- - list
- - watch
- [root@k8s-master-lb ~]#
- 复制代码
RoleBinding:作用于命名空间内,将ClusterRole或者Role绑定到User、Group、ServiceAccount。
- [root@k8s-master-lb ~]# kubectl get rolebinding ingress-nginx -n ingress-nginx -oyaml
- apiVersion: rbac.authorization.k8s.io/v1
- kind: RoleBinding
- metadata:
- creationTimestamp: "2022-08-20T04:59:54Z"
- labels:
- app.kubernetes.io/component: controller
- app.kubernetes.io/instance: ingress-nginx
- app.kubernetes.io/managed-by: Helm
- app.kubernetes.io/name: ingress-nginx
- app.kubernetes.io/version: 0.40.2
- helm.sh/chart: ingress-nginx-3.6.0
- managedFields:
- - apiVersion: rbac.authorization.k8s.io/v1
- fieldsType: FieldsV1
- fieldsV1:
- f:metadata:
- f:labels:
- .: {}
- f:app.kubernetes.io/component: {}
- f:app.kubernetes.io/instance: {}
- f:app.kubernetes.io/managed-by: {}
- f:app.kubernetes.io/name: {}
- f:app.kubernetes.io/version: {}
- f:helm.sh/chart: {}
- f:roleRef:
- f:apiGroup: {}
- f:kind: {}
- f:name: {}
- f:subjects: {}
- manager: Go-http-client
- operation: Update
- time: "2022-08-20T04:59:54Z"
- name: ingress-nginx
- namespace: ingress-nginx
- resourceVersion: "461438"
- uid: 1633ad2d-b46b-4212-ab8d-1c19a7ec35ca
- roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: Role
- name: ingress-nginx
- subjects:
- - kind: ServiceAccount
- name: ingress-nginx
- namespace: ingress-nginx
- [root@k8s-master-lb ~]#
- 复制代码
ClusterRolebinding:作用于整个集群。
- [root@k8s-master-lb ~]# kubectl get clusterrolebinding admin-user -oyaml
- apiVersion: rbac.authorization.k8s.io/v1
- kind: ClusterRoleBinding
- metadata:
- annotations:
- rbac.authorization.kubernetes.io/autoupdate: "true"
- creationTimestamp: "2022-06-22T06:25:56Z"
- managedFields:
- - apiVersion: rbac.authorization.k8s.io/v1
- fieldsType: FieldsV1
- fieldsV1:
- f:metadata:
- f:annotations:
- .: {}
- f:rbac.authorization.kubernetes.io/autoupdate: {}
- f:roleRef:
- f:apiGroup: {}
- f:kind: {}
- f:name: {}
- f:subjects: {}
- manager: kubectl-create
- operation: Update
- time: "2022-06-22T06:25:56Z"
- name: admin-user
- resourceVersion: "35909"
- uid: d4e47393-e698-4405-9bb1-823a6814f7dd
- roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: cluster-admin
- subjects:
- - kind: ServiceAccount
- name: admin-user
- namespace: kube-system
- [root@k8s-master-lb ~]#
- 复制代码
kind分类:ServiceAccount、User、Group。
--basic-auth-file:格式为'password','username','group1,group2'
参考文档:kubernetes.io/docs/refere…
\
基于用户名密码实现不同用户有不同的权限
基于ServiceAccount实现不同的SA有不同的权限