微信网站收钱吗,传奇手游发布网址传奇,营销推广活动方案,2023年中国企业500强第八章 Kubernetes安全
1、Kubernetes RBAC授权
Kubernetes 基于角色的访问控制#xff08;Role-Based Access Control, RBAC#xff09; 是一种强大的权限管理机制#xff0c;用于控制用户、用户组、服务账户对 Kubernetes 集群资源的访问。通过 RBAC#xff0c;可以细…第八章 Kubernetes安全
1、Kubernetes RBAC授权
Kubernetes 基于角色的访问控制Role-Based Access Control, RBAC 是一种强大的权限管理机制用于控制用户、用户组、服务账户对 Kubernetes 集群资源的访问。通过 RBAC可以细粒度地定义哪些用户或服务账户可以执行哪些操作从而增强集群的安全性和可管理性。 1.1 Kubernetes 安全框架
K8S安全控制框架主要由下面3个阶段进行控制每一个阶段都支持 插件方式通过 API Server 配置来启用插件。 Authentication鉴权验证用户身份是否为可信任的 Authorization授权判断用户是否有权限访问某个资源 Admission Control准入控制是否有额外的校验能力做相关方面的验证 1.1.1 鉴权Authentication
K8s Apiserver提供三种客户端身份认证
HTTPS 证书认证基于CA证书签名的数字证书认证kubeconfig例如./kube/configHTTP Token认证通过一个Token来识别用户serviceaccount例如加入集群、Dashboard的TokenHTTP Base认证用户名密码的方式认证1.19版本弃用 1.1.2 授权Authorization
RBACRole-Based Access Control基于角色的访问控制负责完成授权Authorization工作。
RBAC根据API请求属性决定允许还是拒绝。
比较常见的授权维度 user用户名group用户分组资源例如pod、deployment资源操作方法getlistcreateupdatepatchwatchdelete命名空间API组 1.1.3 准入控制Admission Control
Adminssion Control实际上是一个准入控制器插件列表发送到API Server的请求都需要经过这个列表中的每个准入控 制器插件的检查检查不通过则拒绝请求。
启用一个准入控制器
kube-apiserver --enable-admission-pluginsNamespaceLifecycle,LimitRanger ...
关闭一个准入控制器
kube-apiserver --disable-admission-pluginsPodNodeSelector,AlwaysDeny ...
查看默认启用
kubectl exec kube-apiserver-k8s-master -n kube-system -- kube-apiserver -h | grep enable-admission-plugins 补充方便用于可以自定义、扩展访问时的检查控制功能对k8s功能做一个解耦 ## 查看准入控制器
[rootk8s-master-1-71 ~]# vi /etc/kubernetes/manifests/kube-apiserver.yaml 1.2 基于角色的权限访问控制RBAC
RBACRole-Based Access Control基于角色的访问控制 是K8s默认授权策略并且是动态配置策略修改即时生效 主体subject
User用户Group用户组ServiceAccount服务账号
角色
Role授权特定命名空间的访问权限ClusterRole授权所有命名空间的访问权限
角色绑定
RoleBinding将角色绑定到主体即subjectClusterRoleBinding将集群角色绑定到主体
注RoleBinding在指定命名空间中执行授权ClusterRoleBinding在集群范围执行授权。 RBAC 的工作原理 定义角色 使用 Role 或 ClusterRole 定义权限规则。例如定义一个 Role 允许用户查看和列出 Pod。 绑定角色 使用 RoleBinding 将 Role 绑定到特定用户、用户组或服务账户。例如将 pod-reader 角色绑定到用户 jane使其在 default 命名空间中拥有对 Pod 的读取权限。 权限验证 当用户尝试执行操作时Kubernetes 会检查相关的 RoleBinding 和 ClusterRoleBinding。根据绑定的角色和规则决定是否允许该操作。 1角色相关命令 ① role角色 创建rolekubectl create role role-name --verb操作方法 --resource资源 [-n namespace] 例如创建名称为 “pod-reader” 的 Role 对象允许用户对 Pods 执行 get、watch 和 list 操作 kubectl create role pod-reader --verbget --verblist --verbwatch --resourcepods 查看rolekubectl get role [-n namespace]删除rolekubectl delete role role-name [-n namespace] ② clusterrole角色 创建clusterrolekubectl create clusterrole clusterrole-name --verb操作方法 --resource资源 例如创建名称为 “pod-reader” 的 ClusterRole 对象允许用户对 Pods 对象执行 get、 watch 和 list 操作 kubectl create clusterrole pod-reader --verbget,list,watch --resourcepods 查看clusterrolekubectl get clusterrole删除clusterrolekubectl delete clusterrole clusterrole-name 2角色绑定相关命令 ① rolebinding 绑定rolebindingkubectl create rolebinding rolebinding-name --serviceaccountnamespace:serviceaccount-name --clusterrolerole-name或clusterrole-name [-n namespace]查看rolebindingkubectl get rolebinding [-n namespace]删除rolebindingkubectl delete rolebinding rolebinding-name [-n namespace] ② clusterrolebinding 绑定clusterrolebindingkubectl create clusterrolebinding clusterrolebinding-name --serviceaccountnamespace:serviceaccount-name --clusterroleclusterrole-name 查看clusterrolebindingkubectl get clusterrolebinding删除clusterrolebindingkubectl delete clusterrolebinding clusterrolebinding-name 1.3 RBAC授权-kubeConfig配置文件 案例为指定用户授权访问不同命名空间权限例如新入职一个小弟希望让他先熟悉K8s集群为了 安全性先不能给他太大权限因此先给他授权访问default命名空间Pod读取权限。
RBAC授权流程 1. 用K8S CA根证书去签发客户端证书 2. 生成kubeconfig授权文件 3. 创建RBAC权限策略限制访问资源 4. 指定kubeconfig文件测试权限kubectl get pods --kubeconfig./aliang.kubeconfig 步骤1使用cfsll工具拿K8S CA根证书去签发客户端证书
命令
cfssl gencert -caca.crt \ //根证书
-ca-keyca.key \ //根密钥
-configca-config.json \ //根证书配置文件
-profilekubernetes \ //ca-config.json根证书配置文件的profiles
aliang-csr.json | cfssljson -bare aliang //aliang-csr.json为客户端证书请求配置文件aliang为生成证书前缀
# 查看 k8s CA 根证书目录
[rootk8s-master-1-71 ~]# ls /etc/kubernetes/pki/
apiserver.crt apiserver-etcd-client.key apiserver-kubelet-client.crt ca.crt etcd front-proxy-ca.key front-proxy-client.key sa.pub
apiserver-etcd-client.crt apiserver.key apiserver-kubelet-client.key ca.key front-proxy-ca.crt front-proxy-client.crt sa.key
## ca.crt 根证书ca.key 根证书密钥 补充CA根证书可理解为大学客户端证书类似毕业证需要由CA证书去签发 补充在kubeadm部署集群的时候生成ca根证书的配置文件ca-config.json主要描述有效期及其它属性已自动删除所以在 /etc/kubernetes/pki/ 目录下无法查看到需要使用 ca根证书的配置文件 及 客户端证书请求配置文件xx-csr.json 去签发客户端证书 [rootk8s-master-1-71 ~]# mkdir rbac-ssl ; mv rbac.zip rbac-ssl/[rootk8s-master-1-71 ~]# unzip rbac.zip -d rbac-ssl/
[rootk8s-master-1-71 rbac]# bash cert.sh //运行签发客户端证书脚本
cat ca-config.json EOF ## ca根证书的配置文件
{signing: {default: {expiry: 87600h},profiles: {kubernetes: {usages: [signing,key encipherment,server auth,client auth],expiry: 87600h}}}
}
EOFcat aliang-csr.json EOF ## 客户端证书请求配置文件
{CN: aliang,hosts: [],key: {algo: rsa,size: 2048},names: [{C: CN,ST: BeiJing,L: BeiJing,O: k8s,OU: System}]
}
EOFcfssl gencert -ca/etc/kubernetes/pki/ca.crt -ca-key/etc/kubernetes/pki/ca.key -configca-config.json -profilekubernetes aliang-csr.json | cfssljson -bare aliang步骤2生成kubeconfig授权文件 补充kubectl config 命令用来生成或修改 kubeconfig 配置文件用途 [rootk8s-master-1-71 rbac]# bash kubeconfig.sh //运行脚本
# 设置集群
kubectl config set-cluster kubernetes \ ## set-cluster名称可自定义
--certificate-authority/etc/kubernetes/pki/ca.crt \
--embed-certstrue \ ## 将证书嵌套kubeconfig配置文件里false则是路径形式
--serverhttps://192.168.1.71:6443 \ ## 指定APIserver地址
--kubeconfigaliang.kubeconfig ## 指定生成的kubeconfig文件名自定义# 设置客户端认证
kubectl config set-credentials aliang \ ## set-credentials名称可自定义
--client-keyaliang-key.pem \ ## 指定客户端证书
密钥
--client-certificatealiang.pem \ ## 指定客户端证书--embed-certstrue \
--kubeconfigaliang.kubeconfig# 设置默认上下文
kubectl config set-context kubernetes \ ## set-context名称可自定义
--clusterkubernetes \ ## 指定上述的cluster
--useraliang \ ## 指定上述的user
--kubeconfigaliang.kubeconfig# 设置当前使用配置
kubectl config use-context kubernetes --kubeconfigaliang.kubeconfig ## 指定上述的默认上下文 补充适用于一个kubeconfig配置文件中有多个上下文只需要 use-context 指定即可。 步骤3创建角色并将用户与角色绑定 补充apiGroups: 指定组可以通过kubectl api-resources查看v1是核心API组apps/V1则apps为组 ### 创建角色权限集合
[rootk8s-master-1-71 rbac]# kubectl apply -f rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: defaultname: pod-reader
rules:
- apiGroups: [] # api组例如apps组而空值表示是核心API组像namespace、pod、service、pv、pvc都在里面resources: [pods] # 资源名称复数例如pods、deployments、servicesverbs: [get,watch,list] # 资源操作方法# 将用户与角色绑定
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: read-podsnamespace: default
subjects: # 绑定的主体
- kind: Username: aliang # 主体名称(aliang-csr.json的 CN 字段)apiGroup: rbac.authorization.k8s.io
roleRef: # 绑定的角色kind: Rolename: pod-reader # role名称apiGroup: rbac.authorization.k8s.io# 查看角色与角色绑定
[rootk8s-master-1-71 rbac]# kubectl get role
NAME CREATED ATpod-reader 2023-03-06T19:27:06Z
[rootk8s-master-1-71 rbac]# kubectl get rolebinding
NAME ROLE AGEread-pods Role/pod-reader 111s步骤4在不同节点上进行验证
kubectl get pod --kubeconfigaliang.kubeconfig 上述步骤是以kubeconfig文件访问k8s集群kubeconfig文件会绑定一个用户的证书而RBAC则是在k8s集群里绑定了用户参数即客户端配置文件的”CN“字段 所以不管在哪里使用config文件访问集群集群都会识别config文件里的用户通过鉴权识别是否有这个用户授权手段查看用户有什么权限因考虑K8S集群的安全性建议可以把生成xxx.kubeconfig的配置文件拷贝至其它的机器上运行前提是网络之间需要优先联通 示例针对核心API组、deployemnt组的pods、deployment资源可进行delete删除操作
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: defaultname: pod-reader
rules:
- apiGroups: [,apps] # 核心API组、deployemnt组resources: [pods,deployments] # 资源名称verbs: [delete] # 资源操作方法 1.4 RBAC授权-ServiceAccount服务账号
ServiceAccount服务账号简称SA用于让集群内Pod访问k8s Api。RBAC的授权方式与kubeconfig方式一样。 补充SA不需要使用证书授权访问SA属于集群里的虚拟账号 命令 创建Serviceaccount主体kubectl create serviceaccount [-n namespace] 查看Serviceaccount主体kubectl get serviceaccount [-n namespace] 补充在创建Role角色的时候需要指定命名空间创建ClusterRole角色是不需要指定。 命令行-示例1为一个服务账号分配只能创建deployment、daemonset、 statefulset的权限。
# 创建命名空间
[rootk8s-master-1-71 ~]# kubectl create namespace app-team
[rootk8s-master-1-71 ~]# kubectl get ns
NAME STATUS AGE
app-team Active 27s# 指定在app-team命名空间下创建服务账号
[rootk8s-master-1-71 ~]# kubectl create serviceaccount sa-test -n app-team[rootk8s-master-1-71 ~]# kubectl get sa -n app-team
NAME SECRETS AGE
sa-test 0 39s# 创建集群角色指定操作方法指定限制资源
[rootk8s-master-1-71 ~]# kubectl create clusterrole controller-test \
--verbcreate --resourcedeployments,daemonsets,statefulsets
[rootk8s-master-1-71 ~]# kubectl get clusterrole | grep test
controller-test 2023-03-07T01:48:07Z# 将服务账号绑定角色指定主体指定角色
[rootk8s-master-1-71 ~]#
kubectl create rolebinding controller-sa-test-bind \
--serviceaccountapp-team:sa-test \ //指定主体命名空间:Serviceaccount-name
--clusterrolecontroller-test \ //指定要绑定的角色
-n app-team //给Rolebinding指定命名空间不指定默认是在default空间
注意如果 sa 和 role 在某个指定的命名空间下使用 rolebinding 绑定时需要指定该ns否则无法使用sa账户role角色去访问该命名空间的资源。 补充 role 是指定命名空间的role角色绑定时需要指定到某命名空间不指定默认是在default空间clusterrole 是集群的role全局角色绑定时任何命名空间都可以 测试服务账号权限
[rootk8s-master-1-71 ~]# kubectl --assystem:serviceaccount:app-team:sa-test create deployment web2 --imagenginx -n app-team
[rootk8s-master-1-71 ~]# kubectl get pods -n app-team
NAME READY STATUS RESTARTS AGE
web2-5d48fb75c5-2brvr 1/1 Running 0 14m 对应的YAML文件-示例2
apiVersion: v1
kind: ServiceAccount
metadata:name: sa-testnamespace: app-team---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: controller-test
rules:
- apiGroups: [apps]resources: [deployments,daemonsets,statefulsets] verbs: [create]---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: controller-test-bindnamespace: app-team
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: controller-test
subjects:
- kind: ServiceAccountname: sa-testnamespace: app-team 1.4.1 SA服务账号使用场景
场景1使用role角色与rolebinding的方法
[rootk8s-master-1-71 ~]# kubectl create sa test1 -n app-team[rootk8s-master-1-71 ~]# kubectl create role test1-role --verbget,list,watch,create --resourcedeployments,daemonsets,statefulsets -n app-team[rootk8s-master-1-71 ~]# kubectl create rolebinding test1-rb --serviceaccountapp-team:test1 --roletest1-role -n app-team# 测试
[rootk8s-master-1-71 ~]# kubectl --assystem:serviceaccount:app-team:test1 get deployments
Error from server (Forbidden): deployments.apps is forbidden: User system:serviceaccount:app-team:test1 cannot list resource deployments in API group apps in the namespace default
[rootk8s-master-1-71 ~]# kubectl --assystem:serviceaccount:app-team:test1 get deployments -n app-team
No resources found in app-team namespace.结论需要保证sa、role、rolebingding在同一个命名空间下否则不指定命名空间将无法访问 注意如角色是role无法通过clusterrolebinding去绑定主体和角色。 场景2使用clusterrole角色 与 rolebinding、clusterrolebinding 的方法且不指定命名空间默认为defaults
[rootk8s-master-1-71 ~]# kubectl create sa test2
[rootk8s-master-1-71 ~]# kubectl create clusterrole test2-role --verbget,list,watch,create --resourcedeployments,daemonsets,statefulsets
[rootk8s-master-1-71 ~]# kubectl create rolebinding test2-rb --serviceaccountdefault:test2 --clusterroletest2-role## 使用 clusterrolebinding可以在任意命名空间下查看deployments
[rootk8s-master-1-71 ~]# kubectl create clusterrolebinding test2-rb2 --serviceaccountdefault:test2 --clusterroletest2-role
[rootk8s-master-1-71 ~]# kubectl --assystem:serviceaccount:default:test2 get deployments
No resources found in default namespace.[rootk8s-master-1-71 ~]# kubectl --assystem:serviceaccount:default:test2 get deployments -n app-team
No resources found in app-team namespace.## 使用 rolebinding只可以在sa所在的命名空间下查看deployments
[rootk8s-master-1-71 ~]# kubectl delete clusterrolebinding test2-rb2[rootk8s-master-1-71 ~]# kubectl --assystem:serviceaccount:default:test2 get deployments
No resources found in default namespace.[rootk8s-master-1-71 ~]# kubectl --assystem:serviceaccount:default:test2 get deployments -n app-team
Error from server (Forbidden): deployments.apps is forbidden: User system:serviceaccount:default:test2 cannot list resource deployments in API group apps in the namespace app-team
结论role 和 rolebinding 在绑定服务帐号一般都需要指定服务帐号的命名空间创建包括default而 clusterrolebinding 是全局性的绑定不用考虑命名空间 2、网络访问控制
2.1 网络访问控制应用场景
默认情况下Kubernetes 集群网络没任何网络限制Pod 可以与任何其他 Pod 通信在 某些场景下就需要进行网络控制减少网络攻击面提高安全性这就会用到网络策略。
网络策略Network Policy是一个K8s资源用于限制Pod出入流量提供Pod级别和 Namespace级别网络访问控制。
网络策略的应用场景偏重多租户下 应用程序间的访问控制例如项目A不能访问项目B的Pod 开发环境命名空间不能访问测试环境命名空间Pod 当Pod暴露到外部时需要做Pod白名单 2.2 网络策略概述 官网Search Results | Kubernetes apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: test-network-policynamespace: default
spec:podSelector:matchLabels:role: dbpolicyTypes:- Ingress- Egressingress:- from:- ipBlock:cidr: 172.17.0.0/16except:- 172.17.1.0/24- namespaceSelector:matchLabels:project: myproject- podSelector:matchLabels:role: frontendports:- protocol: TCPport: 6379egress:- to:- ipBlock:cidr: 10.0.0.0/24ports:- protocol: TCPport: 5978
podSelector根据标签进行选择目标Pod把网络策略应用到目标Pod上policyTypes策略类型指定策略用于入站、出站流量。Ingressfrom是可以访问的白名单可以来自于IP段、命 名空间、Pod标签等ports是可以访问的端口。Egress这个Pod组可以访问外部的IP段和端口。 Network Policy 网络策略工作流程 1、客户端创建Network Policy资源提交到集群中
2、Policy Controller监控网络策略同步并通知节点上程序
3、节点上DaemonSet运行的程序从etcd中获取Policy调用本 地Iptables创建防火墙规则 补充NetworkPolicy是由网络组件实现的例如calico在每个节点上都是DaemonSet进行部署的。而kube-controllers则是负责网络策略下发的。 相关命令
查看网络策略kubectl get networkpolicy -n 2.3 网络访问控制3个案例 # 准备测试环境分别在不同的命名空间创建Pod
kubectl create namespace test //创建命名空间
kubectl run bs --imagebusybox -- sleep 24h
kubectl run web --imagenginx
kubectl run bs --imagebusybox -n test -- sleep 24h
kubectl run web --imagenginx -n test[rootk8s-master-1-71 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
bs 1/1 Running 0 50m 10.244.117.17 k8s-node1-1-72 none none
web 1/1 Running 0 49m 10.244.117.18 k8s-node1-1-72 none none[rootk8s-master-1-71 ~]# kubectl get pods -o wide -n test
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
bs 1/1 Running 0 2m31s 10.244.114.23 k8s-node2-1-73 none none
web 1/1 Running 0 54m 10.244.114.19 k8s-node2-1-73 none none 案例1拒绝其他命名空间Pod访问 需求test 命名空间下所有pod可以互相访问也可以访问其他命 名空间Pod但其他命名空间不能访问test命名空间Pod。
[rootk8s-master-1-71 ~]# kubectl apply -f networkpolicy-test1.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: test-network-policy-1namespace: test
spec:podSelector: {} # 配置{}表示匹配当前命名空间所有的podpolicyTypes: # 定义策略类型- Ingressingress:- from:- podSelector: {} # 配置{}只有当前命名空间pod可以进流量
测试
[rootk8s-master-1-71 ~]# kubectl get networkpolicy -n test
NAME POD-SELECTOR AGE
test-network-policy-1 none 31s
[rootk8s-master-1-71 ~]# kubectl describe networkpolicy test-network-policy-1 -n test
Name: test-network-policy-1
Namespace: test
Created on: 2023-03-24 18:38:39 0800 CST
Labels: none
Annotations: none
Spec:PodSelector: none (Allowing the specific traffic to all pods in this namespace) //允许特定流量到该名称空间中的所有podAllowing ingress traffic:To Port: any (traffic allowed to all ports)From:PodSelector: noneNot affecting egress trafficPolicy Types: Ingress# 从test命名空间访问外部Pod可以正常访问
[rootk8s-master-1-71 ~]# kubectl exec -it bs -n test -- sh
/ # ping 10.244.117.18
PING 10.244.117.18 (10.244.117.18): 56 data bytes
64 bytes from 10.244.117.18: seq0 ttl62 time0.635 ms# 在default命名空间测试访问test命名空间pod web不能访问
[rootk8s-master-1-71 ~]# kubectl exec -it bs -- sh
/ # ping 10.244.114.19
PING 10.244.114.19 (10.244.114.19): 56 data bytes
4 packets transmitted, 0 packets received, 100% packet loss案例2同一个命名空间下应用之间限制访问
需求将 test 命名空间携带runweb标签的Pod隔离只允许携 带 runclient1 标签的Pod访问80端口。 注意若存在2个不同的网络策略不能同时用在同一个命名空间下的Pod [rootk8s-master-1-71 ~]# kubectl apply -f networkpolicy-test2.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: test-network-policy-2namespace: test
spec:podSelector:matchLabels:run: webpolicyTypes:- Ingressingress:- from:- podSelector:matchLabels:run: client1ports:- protocol: TCPport: 80
测试 # 查看 networkpolicy 网络策略
[rootk8s-master-1-71 ~]# kubectl get networkpolicy -n test //限制的是标签为 runweb 的Pod
NAME POD-SELECTOR AGE
test-network-policy-2 runweb 30s[rootk8s-master-1-71 ~]# kubectl describe networkpolicy test-network-policy-2 -n test
Name: test-network-policy-2
Namespace: test
Created on: 2023-03-24 19:13:27 0800 CST
Labels: none
Annotations: none
Spec:PodSelector: runwebAllowing ingress traffic:To Port: 80/TCP //运行TCP 80进流量访问From:PodSelector: runclient1 //标签为 runclient1 访问Not affecting egress trafficPolicy Types: Ingress[rootk8s-master-1-71 ~]# kubectl get pods -n test --show-labels
NAME READY STATUS RESTARTS AGE LABELS
bs 1/1 Running 0 23m runbs
web 1/1 Running 0 75m runweb# 限制前标签为 runbs Pod还可以正常访问 runweb Pod
[rootk8s-master-1-71 ~]# kubectl exec -it bs -n test -- sh
/ # ping 10.244.114.19
PING 10.244.114.19 (10.244.114.19): 56 data bytes
64 bytes from 10.244.114.19: seq0 ttl63 time0.122 ms# 限制后标签为 runbs Pod不能访问 runweb Pod
[rootk8s-master-1-71 ~]# kubectl exec -it bs -n test -- sh
/ # ping 10.244.114.19
PING 10.244.114.19 (10.244.114.19): 56 data bytes
4 packets transmitted, 0 packets received, 100% packet loss# 重新设置标签为 runclient1 再次测试网页下载正常
[rootk8s-master-1-71 ~]# kubectl label pods bs -n test runclient1 --overwrite
[rootk8s-master-1-71 ~]# kubectl get pods -n test --show-labels
NAME READY STATUS RESTARTS AGE LABELS
bs 1/1 Running 0 40m runclient1
[rootk8s-master-1-71 ~]# kubectl exec -it bs -n test -- sh
/ # ping 10.244.114.19
PING 10.244.114.19 (10.244.114.19): 56 data bytes
14 packets transmitted, 0 packets received, 100% packet loss //由于策略是限制TCP 80访问ICMP被限制
/ # wget 10.244.114.19 //网页下载正常
index.html saved案例3只允许指定命名空间中的应用访问 需求只允许dev命名空间中的Pod 访问 prod命名空间中的pod 80端口
环境准备
[rootk8s-master-1-71 ~]# kubectl create namespace dev
[rootk8s-master-1-71 ~]# kubectl create namespace prod
[rootk8s-master-1-71 ~]# kubectl label namespace dev namedev[rootk8s-master-1-71 ~]# kubectl get ns --show-labels | grep -E prod|dev
dev Active 30m kubernetes.io/metadata.namedev,namedev
prod Active 29m kubernetes.io/metadata.nameprod
[rootk8s-master-1-71 ~]# kubectl run bs --imagebusybox -n dev -- sleep 24h
[rootk8s-master-1-71 ~]# kubectl run web --imagenginx -n prod[rootk8s-master-1-71 ~]# kubectl apply -f networkpolicy-test3.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: networkpolicy-test3namespace: prod
spec:podSelector: {} policyTypes:- Ingressingress:- from:- namespaceSelector: # 匹配命名空间标签matchLabels:name: devports:- protocol: TCPport: 80 测试 # dev命名空间中的Pod 可以访问 prod命名空间中的pod且是80端口
[rootk8s-master-1-71 ~]# kubectl exec -it bs -n dev -- sh
/ # wget 10.244.117.20
index.html saved# default命名空间中的Pod 无法访问 prod命名空间中的pod
[rootk8s-master-1-71 ~]# kubectl exec -it bs -- sh
/ # wget 10.244.117.20
Connecting to 10.244.117.20 (10.244.117.20:80)
... 课后作业
1、完成网络策略案例3只允许指定命名空间中的应用访问 小结
本篇为 【Kubernetes CKA认证 Day8】的学习笔记希望这篇笔记可以让您初步了解到 RBAC授权、网络访问控制课后还有扩展实践不妨跟着我的笔记步伐亲自实践一下吧 Tip毕竟两个人的智慧大于一个人的智慧如果你不理解本章节的内容或需要相关笔记、视频可私信小安请不要害羞和回避可以向他人请教花点时间直到你真正的理解。