容器编排系统K8s之访问控制--RBAC授权

  前文我们了解了k8s上的访问控制机制,主要对访问控制中的第一关用户认证做了相关说明以及常规用户的配置文件的制作,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14207381.html;今天我们来了解下k8s上的访问控制第二关RBAC授权相关话题;

  在k8s上授权的机制有很多,最常用的有ABAC和RBAC;ABAC(attribute based access control)这种是基于属性做访问控制;RBAC(role based access control)这种是基于角色做访问控制;所谓基于属性做访问控制是指,对k8s上的资源的某种属性做授权,授权给相关用户对该资源的某个属性有什么权限;同样的逻辑基于角色做访问控制就是指把k8s上的资源,授权给对应角色有什么权限;那角色和用户有什么关系呢?对于RBAC授权模型来说,在k8s上用户是没法直接关联资源;它是通过角色对象来实现对资源的授权;用户授权是通过角色绑定对象来关联到对应角色;只要用户绑定到对应角色,那么该用户就拥有绑定角色上的所有权限;比如,在k8s上有一个角色名为pod-reader,这个角色能够对default名称空间下的pod资源有只读权限;对其他名称空间任何资源没有任何权限;如果一个用户绑定到该角色上,对应用户就有对default名称空间下的pod资源拥有只读权限,对其他名称空间任何资源没有任何权限;对于k8s上的资源来说,资源有两个级别,一个是名称空间级别的资源,一个是集群级别的资源;比如pod,svc,pvc等等这些资源都是名称空间级别资源,它们的存在必须是在某个名称空间下;对于类似像pv,node,ns这些资源就是集群级别资源,它们的存在不依赖任何名称空间;这样一来对于角色而言就有名称空间级别的角色,也有集群级别角色;名称空间级别的角色就是用来定义特定名称空间下的资源权限,集群级别角色就是用来定义整个集群上的资源权限;在k8s上这两种角色分别叫role和clusterrole;role和clusterrole都是k8s上的资源,我们要给某个用户授权,首先把对应角色资源实例化为一个角色对象,然后把用户和角色对象绑定起来即可;用户怎么绑定到角色上呢?在k8s上绑定这个操作也是通过资源对象实现的;绑定也有两种,一种是rolebinding,一种是clusterrolebinding;rolebinding是名称空间级别资源,它主要用来把对应用户和对应名称空间上的角色(role)做绑定;对应用户就能拥有对应角色在对应名称空间下对应资源的权限;clusterrolebinding主要用来把用户绑定到集群级别角色(clusterrole)上,对应用户就能拥有对整个集群上的对应角色拥有的对应资源的权限;简单讲角色(role/clusterrole)就是用来定义资源的权限,rolebinding和clusterrolebinding是用来关联用户和角色的关系;如下图所示;

  提示:这里需要注意一点,clusterrole是包含名称空间级别的role;也就是说clusterrole既可以用clusterrolebinding来绑定,也可以用rolebinding来绑定,如果rolebinding绑定的是一个集群级别的角色(clusterrole)那么对应绑定至clusterrole的用户的权限就会缩小到对应名称空间下,而非整个集群,原因是rolebinding是名称空间级别资源;

   查看apiserver启用授权插件

  提示:apiserver配置启用RBAC插件需要用--authorization-mode选项来指定对应启用的授权插件,在k8s1.6以后的版本,默认apiserver会启用Node和RBAC授权插件;

  创建角色

  使用陈述时命令create,创建角色的语法格式

Usage:
  kubectl create role NAME --verb=verb --resource=resource.group/subresource
[--resource-name=resourcename] [--dry-run=server|client|none] [options]

  提示:以上create role表示创建的是名称空间级别的角色,如果没有指定其名称空间表示默认名称空间;--verb是用来指定对应的权限,比如get,list,watch等等;--resource使用来指定资源资源类型,比如pods,services,daemonsets,replicasets等等;--resource-name用来指定对应具体的资源的名称;如果要指定名称空间使用-n选项指定即可;默认不指定表示default名称空间;

  示例:使用陈述时命令创建名为pod-reader的角色,该角色拥有对default名称空间下的pod资源有list,get和watch权限;

[root@master01 ~]# kubectl create role pod-reader --verb=list --verb=get --verb=watch --resource=pods 
role.rbac.authorization.k8s.io/pod-reader created
[root@master01 ~]# kubectl get role
NAME         CREATED AT
pod-reader   2020-12-31T11:27:39Z
[root@master01 ~]# kubectl describe role pod-reader
Name:         pod-reader
Labels:       <none>
Annotations:  <none>
PolicyRule:
  Resources  Non-Resource URLs  Resource Names  Verbs
  ---------  -----------------  --------------  -----
  pods       []                 []              [list get watch]
[root@master01 ~]# 

  提示:可以看到pod-reader角色对pods资源有list,get,watch权限;

  使用陈述式命令创建clusterrole

  命令使用语法格式

Usage:
  kubectl create clusterrole NAME --verb=verb --resource=resource.group
[--resource-name=resourcename] [--dry-run=server|client|none] [options]

  提示:使用语法和创建名称空间级别的角色一样,不同的是指定创建的是clusterrole;

  示例:创建一个名为cluster-pods-reader角色,拥有对集群所有名称空间下的pods和servers资源有get,list,watch权限;

[root@master01 ~]# kubectl create clusterrole cluster-pods-reader --verb=get --verb=list --verb=watch --resource=pods --resource=services
clusterrole.rbac.authorization.k8s.io/cluster-pods-reader created
[root@master01 ~]# kubectl get clusterrole cluster-pods-reader
NAME                  CREATED AT
cluster-pods-reader   2020-12-31T11:35:03Z
[root@master01 ~]# kubectl describe clusterrole cluster-pods-reader
Name:         cluster-pods-reader
Labels:       <none>
Annotations:  <none>
PolicyRule:
  Resources  Non-Resource URLs  Resource Names  Verbs
  ---------  -----------------  --------------  -----
  pods       []                 []              [get list watch]
  services   []                 []              [get list watch]
[root@master01 ~]# 

  提示:可以看到cluster-pods-reader角色有对pods资源和services资源有get,list,watch权限;

  创建rolebinding

  命令语法格式

Usage:
  kubectl create rolebinding NAME --clusterrole=NAME|--role=NAME [--user=username]
[--group=groupname] [--serviceaccount=namespace:serviceaccountname] [--dry-run=server|client|none]
[options]

  提示:创建rolebinding需要指定对应的名称,指定clusterrole或者role角色的名称,指定对应的用户名称,或者对应的组名;如果对应用户是sa账号,需要用--serviceaccount选项来指定对应sa的名称;sa的名称由名称空间:sa名称;如果要指定名称空间使用-n选项指定即可;默认不指定表示default名称空间;

  示例:创建名为tom-pods-reader的rolebinding,其中指定对应tom用户绑定至pod-reader角色

[root@master01 ~]# kubectl create rolebinding  tom-pods-reader --role=pod-reader --user=tom 
rolebinding.rbac.authorization.k8s.io/tom-pods-reader created
[root@master01 ~]# kubectl get rolebinding
NAME              ROLE              AGE
tom-pods-reader   Role/pod-reader   5s
[root@master01 ~]# kubectl describe rolebinding tom-pods-reader
Name:         tom-pods-reader
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  Role
  Name:  pod-reader
Subjects:
  Kind  Name  Namespace
  ----  ----  ---------
  User  tom   
[root@master01 ~]# 

  提示;这里没有显示名称空间是那个名称空间;默认没有显示就是default名称空间;

  验证:使用tom用户的配置文件,看看是否可以列出default名称空间下的pod列表呢?

[root@master01 ~]# kubectl config view --kubeconfig=/tmp/myk8s.config
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://192.168.0.41:6443
  name: myk8s
contexts:
- context:
    cluster: myk8s
    user: tom
  name: tom@myk8s
current-context: tom@myk8s
kind: Config
preferences: {}
users:
- name: tom
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    username: tom
[root@master01 ~]# kubectl get pod --kubeconfig=/tmp/myk8s.config    
NAME             READY   STATUS    RESTARTS   AGE
nginx-pod-demo   1/1     Running   1          44h
web-0            1/1     Running   2          2d21h
web-1            1/1     Running   2          2d21h
web-2            1/1     Running   2          2d21h
web-3            1/1     Running   3          2d21h
[root@master01 ~]# 

  提示:可以看到使用tom用户的配置文件,使用kubectl工具加载对应配置文件,在default名称空间下是可以正常列出pod列表;

  验证:使用tom用户的配置文件看看是否列出kube-system名称空间下的pod列表呢?

[root@master01 ~]# kubectl get pod -n kube-system --kubeconfig=/tmp/myk8s.config 
Error from server (Forbidden): pods is forbidden: User "tom" cannot list resource "pods" in API group "" in the namespace "kube-system"
[root@master01 ~]# 

  提示:可以看到对应tom用户是没有权限列出kube-system名称空间下的pod资源;

  创建clusterrolebinding

  命令使用语法格式

Usage:
  kubectl create clusterrolebinding NAME --clusterrole=NAME [--user=username] [--group=groupname]
[--serviceaccount=namespace:serviceaccountname] [--dry-run=server|client|none] [options]

  提示:使用方式和创建rolebinding一样,不同的是clusterrolebinding不能关联role角色;

  示例:创建名为tom-all-pod-reader的clusterrolebinding,并关联cluster-pods-reader角色和tom用户;

[root@master01 ~]# kubectl create clusterrolebinding tom-all-pod-reader --clusterrole=cluster-pods-reader --user=tom
clusterrolebinding.rbac.authorization.k8s.io/tom-all-pod-reader created
[root@master01 ~]# kubectl get clusterrolebinding tom-all-pod-reader
NAME                 ROLE                              AGE
tom-all-pod-reader   ClusterRole/cluster-pods-reader   20s
[root@master01 ~]# kubectl describe clusterrolebinding tom-all-pod-reader
Name:         tom-all-pod-reader
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  ClusterRole
  Name:  cluster-pods-reader
Subjects:
  Kind  Name  Namespace
  ----  ----  ---------
  User  tom   
[root@master01 ~]# 

  验证:使用tom用户的配置文件查看kube-system名称空间下的pod资源列表

[root@master01 ~]# kubectl get pod -n kube-system --kubeconfig=/tmp/myk8s.config 
NAME                                       READY   STATUS    RESTARTS   AGE
coredns-7f89b7bc75-k9gdt                   1/1     Running   18         23d
coredns-7f89b7bc75-kp855                   1/1     Running   16         23d
etcd-master01.k8s.org                      1/1     Running   22         23d
kube-apiserver-master01.k8s.org            1/1     Running   17         23d
kube-controller-manager-master01.k8s.org   1/1     Running   19         23d
kube-flannel-ds-cx8d5                      1/1     Running   20         23d
kube-flannel-ds-jz6r4                      1/1     Running   11         12d
kube-flannel-ds-ndzl6                      1/1     Running   21         23d
kube-flannel-ds-rjtn9                      1/1     Running   23         23d
kube-flannel-ds-zgq92                      1/1     Running   20         23d
kube-proxy-cr8j8                           1/1     Running   13         11d
kube-proxy-h8fzw                           1/1     Running   8          11d
kube-proxy-jfzfh                           1/1     Running   9          11d
kube-proxy-rq8wl                           1/1     Running   8          11d
kube-proxy-sj72v                           1/1     Running   8          11d
kube-scheduler-master01.k8s.org            1/1     Running   19         23d
[root@master01 ~]# kubectl get pod  --kubeconfig=/tmp/myk8s.config               
NAME             READY   STATUS    RESTARTS   AGE
nginx-pod-demo   1/1     Running   1          44h
web-0            1/1     Running   2          2d21h
web-1            1/1     Running   2          2d21h
web-2            1/1     Running   2          2d21h
web-3            1/1     Running   3          2d22h
[root@master01 ~]# kubectl get svc --kubeconfig=/tmp/myk8s.config
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   3d1h
nginx        ClusterIP   None         <none>        80/TCP    3d
[root@master01 ~]# kubectl get svc -n kube-system --kubeconfig=/tmp/myk8s.config
NAME       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   23d
[root@master01 ~]# 

  提示:可以看到把tom用户用clusterrolebinding关联到对应clusterrole角色上,就拥有对应角色上的权限;

  验证:使用tom用户的配置文件查看pv或node集群级别资源,看看是否可以正常列出?

[root@master01 ~]# kubectl get pv --kubeconfig=/tmp/myk8s.config
Error from server (Forbidden): persistentvolumes is forbidden: User "tom" cannot list resource "persistentvolumes" in API group "" at the cluster scope
[root@master01 ~]# kubectl get node --kubeconfig=/tmp/myk8s.config
Error from server (Forbidden): nodes is forbidden: User "tom" cannot list resource "nodes" in API group "" at the cluster scope
[root@master01 ~]# 

  提示:使用tom用户的配置文件查看pv和node资源,apiserver直接拒绝了;原因是对应的clusterrole角色上没有查看pv和node的权限;所以对应用户也就没有相应的查看权限;

  示例:创建rolebinding,把tom用户关联到clusterrole类型角色cluster-pods-reader

[root@master01 ~]# kubectl create rolebinding tom-rolebinding-clusterrole --clusterrole=cluster-pods-reader --user=tom 
rolebinding.rbac.authorization.k8s.io/tom-rolebinding-clusterrole created
[root@master01 ~]# kubectl get rolebinding
NAME                          ROLE                              AGE
tom-pods-reader               Role/pod-reader                   20m
tom-rolebinding-clusterrole   ClusterRole/cluster-pods-reader   12s
[root@master01 ~]# kubectl describe rolebinding tom-rolebinding-clusterrole
Name:         tom-rolebinding-clusterrole
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  ClusterRole
  Name:  cluster-pods-reader
Subjects:
  Kind  Name  Namespace
  ----  ----  ---------
  User  tom   
[root@master01 ~]# 

  验证:使用tom用户的配置文件,看看现在tom用户是否还有对应kube-system中的pod资源有列出权限呢?

[root@master01 ~]# kubectl get pods -n kube-system --kubeconfig=/tmp/myk8s.config
NAME                                       READY   STATUS    RESTARTS   AGE
coredns-7f89b7bc75-k9gdt                   1/1     Running   18         23d
coredns-7f89b7bc75-kp855                   1/1     Running   16         23d
etcd-master01.k8s.org                      1/1     Running   22         23d
kube-apiserver-master01.k8s.org            1/1     Running   17         23d
kube-controller-manager-master01.k8s.org   1/1     Running   19         23d
kube-flannel-ds-cx8d5                      1/1     Running   20         23d
kube-flannel-ds-jz6r4                      1/1     Running   11         12d
kube-flannel-ds-ndzl6                      1/1     Running   21         23d
kube-flannel-ds-rjtn9                      1/1     Running   23         23d
kube-flannel-ds-zgq92                      1/1     Running   20         23d
kube-proxy-cr8j8                           1/1     Running   13         11d
kube-proxy-h8fzw                           1/1     Running   8          11d
kube-proxy-jfzfh                           1/1     Running   9          11d
kube-proxy-rq8wl                           1/1     Running   8          11d
kube-proxy-sj72v                           1/1     Running   8          11d
kube-scheduler-master01.k8s.org            1/1     Running   19         23d
[root@master01 ~]# 

  提示:这里还是能够列出kube-system名称空间下的pod,其原因是我们没有删除之前的clusterrolebinding,所以对应tom用户还有对kube-system的权限;

  验证:删除clusterrolebinding tom-all-pod-reader 看看tom用户是否还有对kube-system中的pod列出权限呢?

[root@master01 ~]# kubectl get clusterrolebinding tom-all-pod-reader
NAME                 ROLE                              AGE
tom-all-pod-reader   ClusterRole/cluster-pods-reader   14m
[root@master01 ~]# kubectl delete clusterrolebinding tom-all-pod-reader
clusterrolebinding.rbac.authorization.k8s.io "tom-all-pod-reader" deleted
[root@master01 ~]# kubectl get rolebinding
NAME                          ROLE                              AGE
tom-pods-reader               Role/pod-reader                   27m
tom-rolebinding-clusterrole   ClusterRole/cluster-pods-reader   7m7s
[root@master01 ~]# kubectl get pods -n kube-system --kubeconfig=/tmp/myk8s.config
Error from server (Forbidden): pods is forbidden: User "tom" cannot list resource "pods" in API group "" in the namespace "kube-system"
[root@master01 ~]# 

  提示:可以看到此时tom用户就没有对kube-system名称空间下的pod有列出权限了;

  验证:使用tom用户的配置文件,查看default名称空间下的pods和service资源,看看是否有权限?

[root@master01 ~]# kubectl get pods  --kubeconfig=/tmp/myk8s.config              
NAME             READY   STATUS    RESTARTS   AGE
nginx-pod-demo   1/1     Running   1          45h
web-0            1/1     Running   2          2d22h
web-1            1/1     Running   2          2d22h
web-2            1/1     Running   2          2d22h
web-3            1/1     Running   3          2d22h
[root@master01 ~]# kubectl get svc  --kubeconfig=/tmp/myk8s.config    
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   3d1h
nginx        ClusterIP   None         <none>        80/TCP    3d
[root@master01 ~]# 

  提示:可以看到tom用户在default名称空间下能够正常列出pod和service资源;从上面的示例可以看到当rolebinding绑定的是一个clusterrole,对应clusterrole的权限就会降低至对应rolebinding的名称空间;

  使用资源清单创建角色

  示例:使用资源清单创建role-demo角色

[root@master01 ~]# cat role-demo.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: role-demo
  namespace: testing
rules:
- apiGroups: [""]
  resources: ["pods","pods/log","services"]
  verbs: ["get","list","watch"]
  
[root@master01 ~]# 

  提示:role资源没有spec字段,它的群组是rbac.authorization.k8s.io/v1,对应类型为Role;metadata字段中的name用于指定对应role的名称;namespace用户指定对应的名称空间;roles字段用来描述对资源和权限,该字段为一个列表对象,一个对象必须有apiGroup,resources和verbs字段;其中apiGroup字段用来描述对应资源所属群组,默认不写任何群组表示核心群组v1;如果是匹配所有群组可以写成“*”;该字段是一个列表类型数据,所以必须用中括号将其括起来,即便没有值;resources字段用来描述对应的资源,这里的资源如果可以使用复数形式的必须使用复数形式;所谓复数是指对应资源名称单词的复数形式;该字段也是一个列表,可以使用中括号,也可以直接使用-开头写对应的值;verbs字段用来描述对应的权限,该字段也是一个列表,可以使用中括号或者“-”开头从下一行直接写值的方式;上述资源清单表示创建一个名为role-demo的角色在testing名称空间;对应角色拥有对该名称空间下的pod,pods/log和services资源有get,watch权限;

  创建名称空间并应用配置清单

[root@master01 ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   23d
ingress-nginx     Active   9d
kube-node-lease   Active   23d
kube-public       Active   23d
kube-system       Active   23d
[root@master01 ~]# kubectl create ns testing
namespace/testing created
[root@master01 ~]# kubectl apply -f role-demo.yaml
role.rbac.authorization.k8s.io/role-demo created
[root@master01 ~]# kubectl get role -n testing
NAME        CREATED AT
role-demo   2020-12-31T12:46:53Z
[root@master01 ~]# kubectl describe role role-demo -n testing
Name:         role-demo
Labels:       <none>
Annotations:  <none>
PolicyRule:
  Resources  Non-Resource URLs  Resource Names  Verbs
  ---------  -----------------  --------------  -----
  pods/log   []                 []              [get list watch]
  pods       []                 []              [get list watch]
  services   []                 []              [get list watch]
[root@master01 ~]# 

  示例:使用资源清单创建rolebinding

[root@master01 ~]# cat rolebinding-demo.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: rolebinding-demo
  namespace: testing
roleRef:
  kind: Role
  name: role-demo
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: User
  apiGroup: rbac.authorization.k8s.io
  name: tom
  
[root@master01 ~]# 

  提示:使用资源清单创建rolebinding,需要用roleRef字段来指定引用的role或clusterrole,该字段为一个对象,其中kind指定对应角色的类型,Role表示引用名称空间级别的role;ClusterRole表示引用集群级别角色clusterrole;apiGroup是用来描述对应角色的不带版本api群组;subjects字段用来描述对应用户或组,该字段为一个列表对象;其中kind字段用来表示对应的是用户还是用户组;User表示用户,Group表示用户组;ServiceAccount表示是一个sa用户;apiGroup用来指定对应不带版本的api群组;name用来指定用户名或组名或sa名;上述资源清单表示把tom用户和role-demo角色做关联,即授权tom用户拥有role-demo角色的权限;

  验证:在未应用资源清单前使用tom用户的配置文件查看testing名称空间下的pod资源

[root@master01 ~]# kubectl get pods -n testing --kubeconfig=/tmp/myk8s.config
Error from server (Forbidden): pods is forbidden: User "tom" cannot list resource "pods" in API group "" in the namespace "testing"
[root@master01 ~]# 

  提示:在未应用上述资源清单,tom用户对testing名称空间的资源没有任何权限;

  应用资源清单

[root@master01 ~]# kubectl apply -f rolebinding-demo.yaml         
rolebinding.rbac.authorization.k8s.io/rolebinding-demo created
[root@master01 ~]# kubectl get rolebinding -n testing
NAME               ROLE             AGE
rolebinding-demo   Role/role-demo   31s
[root@master01 ~]# kubectl describe rolebinding rolebinding-demo -n testing
Name:         rolebinding-demo
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  Role
  Name:  role-demo
Subjects:
  Kind  Name  Namespace
  ----  ----  ---------
  User  tom   
[root@master01 ~]# kubectl get pods -n testing --kubeconfig=/tmp/myk8s.config
No resources found in testing namespace.
[root@master01 ~]# 

  提示:可以看到应用资源清单以后,再次使用tom用户的配置文件查看testing名称空间下的pod资源,就没有提示没有权限拒绝,只是告诉我们对应名称空间下没有pod资源;

  示例:使用资源清单创建clusterrole

[root@master01 ~]# cat clusterrole-demo.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: clusterrole-demo
rules:
- apiGroups: [""]
  resources: ["pods","nodes","PersistentVolume"]
  verbs: ["get","watch","create","delete"]
[root@master01 ~]# 

  提示:使用资源清单创建clusterrole和创建role是一样的格式,不同的是对应kind的值不同,不需要指定名称空间;其他的都一样;

  应用资源清单

[root@master01 ~]# kubectl apply -f clusterrole-demo.yaml
clusterrole.rbac.authorization.k8s.io/clusterrole-demo created
[root@master01 ~]# kubectl get clusterrole clusterrole-demo
NAME               CREATED AT
clusterrole-demo   2020-12-31T13:23:48Z
[root@master01 ~]# kubectl describe clusterrole clusterrole-demo
Name:         clusterrole-demo
Labels:       <none>
Annotations:  <none>
PolicyRule:
  Resources         Non-Resource URLs  Resource Names  Verbs
  ---------         -----------------  --------------  -----
  PersistentVolume  []                 []              [get list watch create delete]
  nodes             []                 []              [get list watch create delete]
  pods              []                 []              [get list watch create delete]
[root@master01 ~]# 

  示例:使用资源清单创建clusterrolebinding

[root@master01 ~]# cat clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: clusterrolebinding-demo
roleRef:
  kind: ClusterRole
  name: clusterrole-demo
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: User
  apiGroup: rbac.authorization.k8s.io
  name: tom
  
[root@master01 ~]# 

  提示:使用资源清单创建clusterrolebinding和创建rolebinding的格式一样,不同的是创建clusterrolebinding不需要指定名称空间,对应kind值为ClusterRoleBinding;其他字段的使用方式和role一样;上述资源清单表示把tom用户和clusterrole-demo角色做关联;

  验证:在没有应用资源清单前使用tom用户的配置文件查看kube-system名称空间下的pod资源

[root@master01 ~]# kubectl get pods -n kube-system --kubeconfig=/tmp/myk8s.config
Error from server (Forbidden): pods is forbidden: User "tom" cannot list resource "pods" in API group "" in the namespace "kube-system"
[root@master01 ~]# 

  提示:没有应用资源清单前使用tom用户的配置文件查看kube-system名称空间下的pod资源,是被apiserver拒绝的;

  应用配置清单

[root@master01 ~]# kubectl apply -f clusterrolebinding.yaml
clusterrolebinding.rbac.authorization.k8s.io/clusterrolebinding-demo created
[root@master01 ~]# kubectl get clusterrolebinding clusterrolebinding-demo
NAME                      ROLE                           AGE
clusterrolebinding-demo   ClusterRole/clusterrole-demo   15s
[root@master01 ~]# kubectl describe clusterrolebinding clusterrolebinding-demo
Name:         clusterrolebinding-demo
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  ClusterRole
  Name:  clusterrole-demo
Subjects:
  Kind  Name  Namespace
  ----  ----  ---------
  User  tom   
[root@master01 ~]# kubectl get pods -n kube-system --kubeconfig=/tmp/myk8s.config           
NAME                                       READY   STATUS    RESTARTS   AGE
coredns-7f89b7bc75-k9gdt                   1/1     Running   18         23d
coredns-7f89b7bc75-kp855                   1/1     Running   16         23d
etcd-master01.k8s.org                      1/1     Running   22         23d
kube-apiserver-master01.k8s.org            1/1     Running   17         23d
kube-controller-manager-master01.k8s.org   1/1     Running   19         23d
kube-flannel-ds-cx8d5                      1/1     Running   20         23d
kube-flannel-ds-jz6r4                      1/1     Running   11         13d
kube-flannel-ds-ndzl6                      1/1     Running   21         23d
kube-flannel-ds-rjtn9                      1/1     Running   23         23d
kube-flannel-ds-zgq92                      1/1     Running   20         23d
kube-proxy-cr8j8                           1/1     Running   13         11d
kube-proxy-h8fzw                           1/1     Running   8          11d
kube-proxy-jfzfh                           1/1     Running   9          11d
kube-proxy-rq8wl                           1/1     Running   8          11d
kube-proxy-sj72v                           1/1     Running   8          11d
kube-scheduler-master01.k8s.org            1/1     Running   19         23d
[root@master01 ~]# 

  提示:可以看到应用资源清单以后,再使用tom用户的配置文件查看kube-system名称空间下的pod就可以正常列出了,说明对应tom用户授权成功;

  查看系统默认的clusterrole

[root@master01 ~]# kubectl get clusterrole
NAME                                                                   CREATED AT
admin                                                                  2020-12-08T06:39:13Z
cluster-admin                                                          2020-12-08T06:39:13Z
cluster-pods-reader                                                    2020-12-31T11:35:03Z
clusterrole-demo                                                       2020-12-31T13:23:48Z
edit                                                                   2020-12-08T06:39:13Z
flannel                                                                2020-12-08T06:59:56Z
kubeadm:get-nodes                                                      2020-12-08T06:39:15Z
nginx-ingress-clusterrole                                              2020-12-21T15:16:13Z
system:aggregate-to-admin                                              2020-12-08T06:39:13Z
system:aggregate-to-edit                                               2020-12-08T06:39:13Z
system:aggregate-to-view                                               2020-12-08T06:39:13Z
system:auth-delegator                                                  2020-12-08T06:39:13Z
system:basic-user                                                      2020-12-08T06:39:13Z
system:certificates.k8s.io:certificatesigningrequests:nodeclient       2020-12-08T06:39:13Z
system:certificates.k8s.io:certificatesigningrequests:selfnodeclient   2020-12-08T06:39:13Z
system:certificates.k8s.io:kube-apiserver-client-approver              2020-12-08T06:39:13Z
system:certificates.k8s.io:kube-apiserver-client-kubelet-approver      2020-12-08T06:39:13Z
system:certificates.k8s.io:kubelet-serving-approver                    2020-12-08T06:39:13Z
system:certificates.k8s.io:legacy-unknown-approver                     2020-12-08T06:39:13Z
system:controller:attachdetach-controller                              2020-12-08T06:39:13Z
system:controller:certificate-controller                               2020-12-08T06:39:13Z
system:controller:clusterrole-aggregation-controller                   2020-12-08T06:39:13Z
system:controller:cronjob-controller                                   2020-12-08T06:39:13Z
system:controller:daemon-set-controller                                2020-12-08T06:39:13Z
system:controller:deployment-controller                                2020-12-08T06:39:13Z
system:controller:disruption-controller                                2020-12-08T06:39:13Z
system:controller:endpoint-controller                                  2020-12-08T06:39:13Z
system:controller:endpointslice-controller                             2020-12-08T06:39:13Z
system:controller:endpointslicemirroring-controller                    2020-12-08T06:39:13Z
system:controller:expand-controller                                    2020-12-08T06:39:13Z
system:controller:generic-garbage-collector                            2020-12-08T06:39:13Z
system:controller:horizontal-pod-autoscaler                            2020-12-08T06:39:13Z
system:controller:job-controller                                       2020-12-08T06:39:13Z
system:controller:namespace-controller                                 2020-12-08T06:39:13Z
system:controller:node-controller                                      2020-12-08T06:39:13Z
system:controller:persistent-volume-binder                             2020-12-08T06:39:13Z
system:controller:pod-garbage-collector                                2020-12-08T06:39:13Z
system:controller:pv-protection-controller                             2020-12-08T06:39:13Z
system:controller:pvc-protection-controller                            2020-12-08T06:39:13Z
system:controller:replicaset-controller                                2020-12-08T06:39:13Z
system:controller:replication-controller                               2020-12-08T06:39:13Z
system:controller:resourcequota-controller                             2020-12-08T06:39:13Z
system:controller:root-ca-cert-publisher                               2020-12-08T06:39:13Z
system:controller:route-controller                                     2020-12-08T06:39:13Z
system:controller:service-account-controller                           2020-12-08T06:39:13Z
system:controller:service-controller                                   2020-12-08T06:39:13Z
system:controller:statefulset-controller                               2020-12-08T06:39:13Z
system:controller:ttl-controller                                       2020-12-08T06:39:13Z
system:coredns                                                         2020-12-08T06:39:15Z
system:discovery                                                       2020-12-08T06:39:13Z
system:heapster                                                        2020-12-08T06:39:13Z
system:kube-aggregator                                                 2020-12-08T06:39:13Z
system:kube-controller-manager                                         2020-12-08T06:39:13Z
system:kube-dns                                                        2020-12-08T06:39:13Z
system:kube-scheduler                                                  2020-12-08T06:39:13Z
system:kubelet-api-admin                                               2020-12-08T06:39:13Z
system:monitoring                                                      2020-12-08T06:39:13Z
system:node                                                            2020-12-08T06:39:13Z
system:node-bootstrapper                                               2020-12-08T06:39:13Z
system:node-problem-detector                                           2020-12-08T06:39:13Z
system:node-proxier                                                    2020-12-08T06:39:13Z
system:persistent-volume-provisioner                                   2020-12-08T06:39:13Z
system:public-info-viewer                                              2020-12-08T06:39:13Z
system:service-account-issuer-discovery                                2020-12-08T06:39:13Z
system:volume-scheduler                                                2020-12-08T06:39:13Z
view                                                                   2020-12-08T06:39:13Z
[root@master01 ~]# 

  提示:以system开头的都是系统默认创建的clusterrole角色;这些角色都是用来给对应组件授权用的,比如,system:kube-dns就是用来给kube-dns这个pod在apiserver上验证授权需要使用的角色;system:kube-controller-manager这个角色就是用来kube-controller-manager这个pod在apiserver上拥有的权限;kube-controller-manager这个pod向apiserver验证时,首先把对应的证书发送给apiserver,apiserver通过识别对应证书中CN的名字来确定对应的用户名;如果对应用户名是system:kube-controller-manager,那么对应kube-controller-manager这个pod就拥有对应该角色的所有权限;如果我们手动部署的k8s集群,对应controller-manager的证书中CN名称不是system:kube-controller-manager,那么我们手动部署的k8s集群将不能正常工作,对于其他组件也是类似的逻辑;除了内置了以system开头的很多clusterrole,k8s为了方便我们授权,它还内置了4个特殊的clusterrole,分别是cluster-admin,admin,edit和view;其中cluster-admin是拥有对整个集群的所有资源拥有所有权限,默认这个角色被clusterrolebinding绑定在system:master这个组上;对应kuberctl使用的证书文件中O的信息就是system:master,所以我们使用kubectl加载默认的配置文件可以操作整个集群上的所有资源;admin角色也是一个管理员权限,不同于cluster-admin,admin角色一般用于通过rolebinding来实现对特有名称空间的管理员授权;edit和view也是类似的逻辑,主要用于通过rolebinding来实现特有名称空间下的特定管理员;比如快速授权某个用户在某个名称空间下拥有只读权限,那么我们就可以把对应用户通过rolebinding将其绑定至view这个clusterrole角色上;如果只允许某个用户拥有对应名称空间下的所有资源的修改权限,就可以把对应用户通过rolebinding绑定到edit这个clusterrole角色上;当然以上几个角色也可以通过clusterrolebinding来绑定,用clusterrolebinding来绑定,对应用户就是对应整个集群的所有资源;有了上述4个内置的clusterrole,我们就可以快速的将某个用户授权为特定的角色:

  查看kubectl默认证书中的信息

  复制配置文件中的client-certificate-data 对应的被base64编码处理过的信息,然后通过base64 -d将其解密,然后使用openssl x509  -text -noout 来查看对应证书中的信息

  提示:可以看到当前kubectl的证书中O=system:master CN=kubernetes-admin;之所以kubectl能够管理集群资源是因为对应证书中的O=system:master,该信息直接对应k8s上的集群角色cluster-admin;对应集群角色就是通过clusterrolebinding绑定到system:master组;所以kubectl就拥有对k8s整个集群资源的管控;

  示例:授权tom用户为集群管理员

[root@master01 ~]# cat tom-clusterrolebinding-cluster-admin.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tom-cluster-admin
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: User
  apiGroup: rbac.authorization.k8s.io
  name: tom
  
[root@master01 ~]# 

  提示:上述资源表示通过clusterrolebinding授权tom用户拥有cluster-admin角色的所有权限,即集群管理员;

  应用资源清单

[root@master01 ~]# kubectl apply -f tom-clusterrolebinding-cluster-admin.yaml
clusterrolebinding.rbac.authorization.k8s.io/tom-cluster-admin created
[root@master01 ~]# kubectl get clusterrolebinding tom-cluster-admin
NAME                ROLE                        AGE
tom-cluster-admin   ClusterRole/cluster-admin   21s
[root@master01 ~]# kubectl describe clusterrolebinding tom-cluster-admin
Name:         tom-cluster-admin
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  ClusterRole
  Name:  cluster-admin
Subjects:
  Kind  Name  Namespace
  ----  ----  ---------
  User  tom   
[root@master01 ~]# 

  验证:使用tom用户的配置文件,管理集群资源

[root@master01 ~]# kubectl get all --kubeconfig=/tmp/myk8s.config
NAME                 READY   STATUS    RESTARTS   AGE
pod/nginx-pod-demo   1/1     Running   1          47h
pod/web-0            1/1     Running   2          3d
pod/web-1            1/1     Running   2          3d
pod/web-2            1/1     Running   2          3d
pod/web-3            1/1     Running   3          3d

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   3d3h
service/nginx        ClusterIP   None         <none>        80/TCP    3d3h

NAME                   READY   AGE
statefulset.apps/web   4/4     3d3h
[root@master01 ~]# kubectl delete all --all --kubeconfig=/tmp/myk8s.config
pod "nginx-pod-demo" deleted
pod "web-0" deleted
pod "web-1" deleted
pod "web-2" deleted
pod "web-3" deleted
service "kubernetes" deleted
service "nginx" deleted
statefulset.apps "web" deleted
[root@master01 ~]# kubectl apply -f statefulset-demo.yaml --kubeconfig=/tmp/myk8s.config 
service/nginx created
statefulset.apps/web created
[root@master01 ~]# kubectl get all --kubeconfig=/tmp/myk8s.config          
NAME        READY   STATUS    RESTARTS   AGE
pod/web-0   1/1     Running   0          9s
pod/web-1   1/1     Running   0          6s
pod/web-2   1/1     Running   0          4s

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   85s
service/nginx        ClusterIP   None         <none>        80/TCP    9s

NAME                   READY   AGE
statefulset.apps/web   3/3     9s
[root@master01 ~]# 

  提示:可以看到我们使用tom用户的配置文件和默认配置文件是一样的效果,瞬间tom用户就变成了集群管理;

  删除tom-cluster-admin这个clusterrolebinding

[root@master01 ~]# kubectl delete -f tom-clusterrolebinding-cluster-admin.yaml 
clusterrolebinding.rbac.authorization.k8s.io "tom-cluster-admin" deleted
[root@master01 ~]# 

  授权tom用户只读ingress-nginx名称空间下的所有资源

[root@master01 ~]# cat tom-ingress-nginx-view.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: tom-ingress-nginx-view
  namespace: ingress-nginx
roleRef:
  kind: ClusterRole
  name: view
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: User
  apiGroup: rbac.authorization.k8s.io
  name: tom
  
[root@master01 ~]# 

  提示:上述配置表示通过ingress-nginx名称 空间下的rolebinding把tom用户绑定至view这个clusterrole上;即对应tom用户对ingress-nginx名称空间下的所有资源只有只读权限;

  应用资源配置清单

[root@master01 ~]# kubectl apply -f tom-ingress-nginx-view.yaml
rolebinding.rbac.authorization.k8s.io/tom-ingress-nginx-view created
[root@master01 ~]# kubectl get rolebinding -n ingress-nginx
NAME                              ROLE                      AGE
nginx-ingress-role-nisa-binding   Role/nginx-ingress-role   9d
tom-ingress-nginx-view            ClusterRole/view          22s
[root@master01 ~]# kubectl describe rolebinding tom-ingress-nginx-view -n ingress-nginx
Name:         tom-ingress-nginx-view
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  ClusterRole
  Name:  view
Subjects:
  Kind  Name  Namespace
  ----  ----  ---------
  User  tom   
[root@master01 ~]# 

  验证:使用tom用户的配置文件管理ingress-nginx名称空间下的资源

[root@master01 ~]# kubectl get pods -n ingress-nginx --kubeconfig=/tmp/myk8s.config             
NAME                                        READY   STATUS    RESTARTS   AGE
nginx-ingress-controller-5466cb8999-dzn5d   1/1     Running   0          33s
[root@master01 ~]# kubectl get pods --kubeconfig=/tmp/myk8s.config
Error from server (Forbidden): pods is forbidden: User "tom" cannot list resource "pods" in API group "" in the namespace "default"
[root@master01 ~]# kubectl delete pod nginx-ingress-controller-5466cb8999-dzn5d -n ingress-nginx --kubeconfig=/tmp/myk8s.config
Error from server (Forbidden): pods "nginx-ingress-controller-5466cb8999-dzn5d" is forbidden: User "tom" cannot delete resource "pods" in API group "" in the namespace "ingress-nginx"
[root@master01 ~]#

  提示:可以看到现在tom用户只能查看ingress-nginx名称空间下的资源,不能查看default名称空间下的资源,其次对ingress-nginx名称空间下的pod资源没有删除权限;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读942次。kube-controller-manager 和 kubelet 是异步工作的,这意味着延迟可能包括任何的网络延迟、apiserver 的延迟、etcd 延迟,一个节点上的负载引起的延迟等等。当 Kubernetes 中 Node 节点出现状态异常的情况下,节点上的 Pod 会被重新调度到其他节点上去,但是有的时候我们会发现节点 Down 掉以后,Pod 并不会立即触发重新调度,这实际上就是和 Kubelet 的状态更新机制密切相关的,Kubernetes 提供了一些参数配置来触发重新调度的时间。_node-monitor-period
文章浏览阅读3.8k次。上篇文章详细介绍了弹性云混部的落地历程,弹性云是滴滴内部提供给网约车等核心服务的容器平台,其基于 k8s 实现了对海量 node 的管理和 pod 的调度。本文重点介绍弹性云的调度能力,分为以下部分:调度链路图:介绍当前弹性云调度体系链路,对架构体系有一个初步的认知k8s 调度能力的运用:整体介绍弹性云现在用到的 k8s 调度能力和对其的增强k8s 版本的升级:介绍到从 k8s 1.12 到 1...._滴滴机房 腾讯
文章浏览阅读897次。对于cpu来说,这种分配方式并不会有太大问题,因为cpu可以灵活调度,numa调度时我们只计算绑定了numa cpu的pod是可以接受的,但是对于内存来说,numa node上申请了的内存无法做到随时迁移,这就会导致调度器视角numa node的mem资源足够,但是等到pod真正使用时,由于没有绑定numa node的pod申请的内存,导致numa node的mem资源不足,造成swap中断或者远端内存申请,这会对绑定mem的pod来带来性能损耗。忽略了没有绑定numa node的pod资源。_kubectl numa
文章浏览阅读796次,点赞17次,收藏15次。只要在Service定义中设置了ClusterIp:None,就定义了一个HeadLess Service, 它与普通的Service关键区别在于它没有ClusterIp地址,如果解析HeadLess Service的DNS域名,则会返回该Service对应的全部Pod的EndPoint列表,这就意味着客户端是直接与后端的pod建立了TCP/IP链接进行通信的。一个Label是一个键值对。注解:属于资源对象的元数据,可以被理解为一种特殊的标签,不过更多的是与程序挂钩,通常用于实现资源对象属性的自定义扩展。
文章浏览阅读763次。但是此时如果配置成 NONE, 租户创建成功了,但是无法创建资源文件,也就是无法上传文件,可能 dolphinscheduler 团队就想着将文件上传到 hdfs,暂不支持本地。需要将 resource.storage.type 置为 NONE, 因为我之前用的 1.3.6 版本的时候,即使资源文件存在本地文件也需要配置成 hdfs。_[error] 2023-10-24 18:10:43.762 +0800 org.apache.dolphinscheduler.api.servic
文章浏览阅读2.7k次,点赞2次,收藏13次。公司使用的是交老的k8s版本(1.16),由于老版本的K8s对于现在很多新特性不支持,所以需要升级到新版本。目前2023年7月11日最新版本的k8s是v1.27.3。通过参考官方文档进行k8s部署工作。其中涉及到操作系统配置、防火墙配置、私有镜像仓库等。_k8s最新版本
文章浏览阅读1.8w次,点赞14次,收藏27次。能节省你在kubeadm init 时遇到问题的排错时间⌚️。整合了网上大佬
文章浏览阅读1.1k次,点赞2次,收藏7次。具体操作步骤可以参考之前的教程,建议是先安装一台,然后克隆虚拟机,这样速度快。注意:在克隆时记得修改Mac地址、IP地址、UUID和主机名。(最后别忘了保存下快照~)_部署k8s集群
文章浏览阅读863次,点赞23次,收藏16次。当部署完 Kubernetes,便拥有了一个完整的集群。一组工作机器,称为节点, 会运行容器化应用程序。每个集群至少有一个工作节点。工作节点会 托管Pod ,而 Pod 就是作为应用负载的组件。控制平面管理集群中的工作节点和Pod。说人话版本:集群:cluster,多个几点被组织到一起共同为系统提供服务过程称之为集群。本质上是将承载同一个软件服务节点组织到一起,称之为该软件(服务)的集群,当然集群中的节点身份地位是不一样的。k8s集群也是如此,他也是多个节点组成。
文章浏览阅读943次。Rancher是一个开源的企业级多集群Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理,以确保集群的安全性,加速企业数字化转型。Rancher 1.0版本在2016年就已发布,时至今日,Rancher已经成长为企业在生产环境中运行容器和Kubernetes的首要选择。_rancher管理k8s
文章浏览阅读742次,点赞2次,收藏3次。本篇来讲解如何在centos下安装部署高可用k8s集群。_kubeadm ha keepalived + nginx
文章浏览阅读1.9k次,点赞21次,收藏25次。那么这个空间设置成内存的2倍大小。点击IPv4设置--手动--添加--设置ip--设置DNS服务器,最后点击--“保存”;首先选中--“本地标准磁盘”,存储配置--自定义分区,点击--“完成”;在--主机名--设置主机名:(例如k8s-master01),点击--点击+,设置--挂载点/boot--期望容量,点击--添加挂载点;点击--+--挂载点swap--期望容量,点击--“添加挂载点”;默认选择--亚洲--上海,并调整日期和时间,点击--“完成”;设备类型--确认--LVM,卷组--选择“修改”;_euler 服务器搭建
文章浏览阅读1k次。在1.25版本的k8s集群中部署gpu-manage时,虽然显示gpu节点上gpu-manage的pod实例都是running状态,但是给pod申领。既可以用源码的Makefile自动编译打包成新的镜像,但是源码的。说明gpu-manager和容器运行时接口通信失败了。编译后的镜像在1.25版本的k8s中可以正常使用。,但是在k8s1.23版本之后,接口路径已经改为。资源时,却始终找不到有资源的节点。,另外有一些依赖需要国际上的支持。可以看到这里用的运行时接口是。查看节点的详情时,返回的。_launch gpu manager 报错 can't create container runtime manager: context dead
文章浏览阅读1k次,点赞18次,收藏16次。SelfLink:API的资源对象之一,表示资源对象在集群当中自身的一个连结,self-Link是一个唯一的标识号,可以用于标识k8s集群当中的每个资源的对象。容器里使用的配置,在provisioner当中定义好环境变量,传给容器,storageclass的名称,NFS服务器的地址,NFS的目录。NFS的provisionner的客户端以pod的方式运行在集群当中,监听k8s集群当中PV的请求,然后动态的创建于NFS相关的PV。命名为 nfs-client-provisioner-clusterrole。
文章浏览阅读6.3k次,点赞2次,收藏20次。k8s证书过期解决方案之替换证书_k8s证书过期如何更换
文章浏览阅读1k次。KMS,Key Management Service,即密钥管理服务,在K8S集群中,以驱动和插件的形式启用对Secret,Configmap进行加密。以保护敏感数据
文章浏览阅读888次。exporter对于云服务的监控还是很不完美,毕竟每家都有自己的护城河。自动发现多实例这样的借助consul 阿波罗这样的会简单一些。aws可以借助cloudwatch这样的导入模板到grafana中。还是希望能将类似腾讯云云监控中的这些指标采集到prometheus中,但是这过程应该还很遥远grafana出图 prometheus查询语法这些东西有时间的好好研究一下。报警有必要进行分级别,收敛配置一下!_command: - "-redis.password-file=/redis_passwd.json
文章浏览阅读1k次。可以在此处(https://cloud.google.com/kubernetes-engine/docs/how-to/kube-dns)和此处(https://www.digitalocean.com/community/tutorials/an-introduction-to-the-kubernetes-dns-service)找到更多的详细信息。-or-ipvs/)和此处(https://arthurchiao.art/blog/cracking-k8s-node-proxy/)。_k8s默认命名空间
文章浏览阅读4.9k次,点赞11次,收藏32次。如果运行runc命令时提示:runc: error while loading shared libraries: libseccomp.so.2: cannot open shared object file: No such file or directory,则表明runc没有找到libseccomp,需要检查libseccomp是否安装,本次安装默认就可以查询到。所有主机均需要操作。所有主机均需要操作。所有主机均需要操作。所有主机均需要操作。所有主机均需要操作。所有主机均需要操作。_kubernetes 1.28
文章浏览阅读3.6w次,点赞118次,收藏144次。Canal 提供了网络功能,使得 Kubernetes 集群中的 Pod 可以相互通信,并与集群外部的服务进行通信。它通过网络插件的方式,为每个 Pod 分配唯一的 IP 地址,并管理网络流量的路由和转发。此外,Canal 还支持网络策略,用于定义 Pod 之间的通信规则和安全策略。Canal 基于 Calico 和 Flannel 项目,结合了二者的优点。它使用 Calico 的数据平面,提供高性能的网络转发和安全特性,同时使用 Flannel 的控制平面,实现 IP 地址管理和网络策略的配置。_k8s canal