43、K8S-网络机制之网络策略、流量管控、NetworkPolicy、GlobalNetworkPolicy
1、基础知识
1.1、k8s策略
1.1.1、想象中的策略
到现在为止,我们之前操作过的k8s资源对象中,跟策略相关的无非就是 权限认证 - 权限认证主要是与用户登录和资源使用有关系 命名空间 - 命名空间可以将我们相关的资源进行隔离,但是我们可以通过 "命名空间.资源对象" 的方式来进行资源通信。 而实际上,k8s中对于资源控制的策略要远远的超出我们之前的理解。
1.1.2、k8s的资源策略体系
在k8s的从策略体系中,策略的内容非常庞大,不过我们可以根据自己的理解,抽取出来最主要的四个方面: 1、资源的使用限制 - limit range 2、资源的应用配额 - resource quota 3、资源的安全控制 - podsecritypolicy 4、资源的网络策略 - network policy,主要来管控资源的 通信流量的
1.1.3、转换规则策略不同
这里的策略也会被k8s集群中的控制器转换成内核的iptables的规则,只不过与service转换的规则不同。
service会被转换成iptables的net 或 mangle 表的规则
资源策略中的规则会被转换成 iptables的filter表上的规则
1.1.4、网络策略
为了使用Network Policy,Kubernetes引入了一个新的资源对象Network Policy,供用户设置 Pod间网络访问的策略。但仅定义一个网络策略是无法完成实际的网络隔离的,还需要一个策略控制器 (Policy Controller)进行策略的实现。 网络策略功能由网络插件实现,支持网络策略的插件有 Calico、Canal、kube-router等,在k8s环 境中,专门基于这些策略管理软件的操作对象叫策略控制器,最常见的是networkpolicies。 策略控制器用于监控指定区域创建对象(pod)时所生成的新API端点,并按需为其附加网络策略。 对于Pod对象来说,网络流量分为 流入(Ingress)和流出(Egress)两个方向,每个方向包含允许和禁 止两种控制策略,默认情况下,所有的策略都是允许的,应用策略后,所有未经明确允许的流量都将拒绝。
1.1.5、网络策略图
相关术语:
Pod组,NetworkPolicy通过Pod选择器选定的一组Pod
Egress,出站流量,由流量的目标网络端口 to 和端口 ports 定义
Ingress,入站流量,由流量发出的源站点 from 和流量的目标端口定义
Selector: 选择pod对象的一种机制:
基于命名空间选择pod、基于网段来选择pod、基于pod标签来选择pod
1.2、配置解析
1.2.1、实践细节
为实现细粒度的容器间网络访问隔离策略,Kubernetes发布Network Policy,目前已升级为networking.k8s.io/v1稳定版本。 Network Policy的主要功能是对Pod间的网络通信进行限制和准入控制,设置方式为将Pod的Label 作为查询条件,设置允许访问或禁止访问的客户端Pod列表。目前查询条件可以作用于Pod和Namespace级别。
1.2.2、策略图
1.2.3、资源对象属性解析
apiVersion: networking.k8s.io/v1 # 资源隶属的API群组及版本号 kind: NetworkPolicy # 资源类型的名称,名称空间级别的资源; metadata: # 资源元数据 name <string> # 资源名称标识 namespace <string> # NetworkPolicy是名称空间级别的资源 spec: # 期望的状态 podSelector <Object> # 当前规则生效的一组目标Pod对象,必选字段;空值表示当前名称空间中的所有Pod资源 policyTypes <[]string> # Ingress表示生效ingress字段;Egress表示生效egress字段,同时提供表示二者均有效 ingress <[]Object> # 入站流量源端点对象列表,白名单,空值表示“所有” - from <[]Object> # 具体的端点对象列表,空值表示所有合法端点 - ipBlock <Object> # IP地址块范围内的端点,不能与另外两个字段同时使用 - namespaceSelector <Object> # 匹配的名称空间内的端点 podSelector <Object> # 由Pod标签选择器匹配到的端点,空值表示<none> ports <[]Object> # 具体的端口对象列表,空值表示所有合法端口 egress <[]Object> # 出站流量目标端点对象列表,白名单,空值表示“所有” - to <[]Object> # 具体的端点对象列表,空值表示所有合法端点,格式同 ingres.from; ports <[]Object> # 具体的端口对象列表,空值表示所有合法端口 注意: 入栈和出栈哪个策略生效,由 policyTypes 来决定。 如果仅配置了podSelector,表明,当前限制仅限于当前的命名空间
2、创建NetworkPolicy-实践
2.1、创建网络策略
2.1.1、定义资源配置清单
kubectl apply -f - <<'EOF' apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy namespace: default spec: podSelector: matchLabels: role: db policyTypes: - Ingress - Egress ingress: - from: - ipBlock: cidr: 10.244.0.0/16 except: - 10.244.1.0/24 - namespaceSelector: matchLabels: project: develop - podSelector: matchLabels: arch: frontend ports: - protocol: TCP port: 6379 egress: - to: - ipBlock: cidr: 10.244.0.0/24 ports: - protocol: TCP port: 3306 EOF
2.1.2、查询网络策略控制器
master1 ~]# kubectl get networkpolicies NAME POD-SELECTOR AGE test-network-policy role=db 15s
2.2、创建deployment控制器
2.2.1、定义资源配置清单
kubectl apply -f - <<EOF apiVersion: v1 kind: Namespace metadata: name: develop labels: kubernetes.io/metadata.name: develop --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: pod-deployment name: pod-deployment namespace: develop spec: replicas: 3 selector: matchLabels: app: pod-deployment template: metadata: labels: app: pod-deployment spec: containers: - image: 192.168.10.33:80/k8s/pod_test:v0.1 name: pod-test --- apiVersion: v1 kind: Service metadata: labels: app: pod-deployment name: pod-deployment namespace: develop spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: pod-deployment type: ClusterIP EOF
2.2.2、查询是否创建成功
master1 ~]# kubectl -n develop get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-deployment-59c85b5d69-fmxfd 1/1 Running 0 12m 10.244.3.9 node1 <none> <none> pod-deployment-59c85b5d69-qr26z 1/1 Running 0 12m 10.244.3.10 node1 <none> <none> pod-deployment-59c85b5d69-zgbf4 1/1 Running 0 12m 10.244.4.7 node2 <none> <none> master1 ~]# kubectl -n develop get deployments.apps NAME READY UP-TO-DATE AVAILABLE AGE pod-deployment 3/3 3 3 12m master1 ~]# kubectl -n develop get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE pod-deployment ClusterIP 10.111.188.179 <none> 80/TCP 12m
2.3、访问 SVC IP地址 测试是否正常
master1 ~]# curl 10.111.188.179 kubernetes pod-test v0.1!! ClientIP: 192.168.10.26, ServerName: pod-deployment-59c85b5d69-qr26z, ServerIP: 10.244.3.10! master1 ~]# curl 10.111.188.179 kubernetes pod-test v0.1!! ClientIP: 192.168.10.26, ServerName: pod-deployment-59c85b5d69-fmxfd, ServerIP: 10.244.3.9! master1 ~]# curl 10.111.188.179 kubernetes pod-test v0.1!! ClientIP: 192.168.10.26, ServerName: pod-deployment-59c85b5d69-qr26z, ServerIP: 10.244.3.10! master1 ~]# curl 10.111.188.179 kubernetes pod-test v0.1!! ClientIP: 192.168.10.26, ServerName: pod-deployment-59c85b5d69-zgbf4, ServerIP: 10.244.4.7!
3、流量管控
3.1、流量管控策略-设置默认拒绝所有pod
3.1.1、定义资源配置清单
kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all-ingress namespace: develop spec: podSelector: {} policyTypes: ["Ingress", "Egress"] EOF 配置解析: 这里面的 podSelector 值为空,表示当前命名空间中所有的pod policyType中指明了 Ingress 和 Egress。但是没有定义任何ingress字段,表示不允许所有pod有流量通过
3.1.2、查看创建的资源
master1 ~]# kubectl get networkpolicies -n develop NAME POD-SELECTOR AGE deny-all-ingress <none> 22s
3.1.3、访问所有的pod和svc IP地址,访问不了
master1 ~]# kubectl get pods -n develop -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-deployment-59c85b5d69-fmxfd 1/1 Running 0 20m 10.244.3.9 node1 <none> <none> pod-deployment-59c85b5d69-qr26z 1/1 Running 0 20m 10.244.3.10 node1 <none> <none> pod-deployment-59c85b5d69-zgbf4 1/1 Running 0 20m 10.244.4.7 node2 <none> <none> [root@master1 ~]# kubectl get svc -n develop NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE pod-deployment ClusterIP 10.111.188.179 <none> 80/TCP 23m # 访问SVC IP地址,都是访问不了 [root@master1 ~]# curl --connect-timeout 2 10.111.188.179 curl: (28) Connection timed out after 2001 milliseconds # 访问POD IP地址,都是访问不了 master1 ~]# curl --connect-timeout 2 10.244.3.9 curl: (28) Connection timed out after 2001 milliseconds master1 ~]# curl --connect-timeout 2 10.244.3.10 curl: (28) Connection timed out after 2002 milliseconds master1 ~]# curl --connect-timeout 2 10.244.4.7 curl: (28) Connection timed out after 2001 milliseconds
3.1.4、删除创建的networkpolicies
# 删除掉,继续下一个示例
kubectl -n develop delete networkpolicies deny-all-ingress
3.1.5、总结
所有pod都不能相互访问
3.2、流量管控策略-设置默认允许所有pod
3.2.1、定义资源配置清单
kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-all-ingress namespace: develop spec: podSelector: {} policyTypes: ["Ingress", "Egress"] egress: - {} ingress: - {} EOF 配置解析: 在下面分别指定了egress和ingress,虽然没有配置,表示所有的pod都不采用默认拒绝策略 -- 全部接收请求
3.2.2、查看创建的资源
master1 ~]# kubectl -n develop get networkpolicies NAME POD-SELECTOR AGE allow-all-ingress <none> 9m19s
3.2.3、访问所有的pod和svc IP地址,可以访问了
master1 ~]# kubectl -n develop get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-deployment-59c85b5d69-fmxfd 1/1 Running 0 31m 10.244.3.9 node1 <none> <none> pod-deployment-59c85b5d69-qr26z 1/1 Running 0 31m 10.244.3.10 node1 <none> <none> pod-deployment-59c85b5d69-zgbf4 1/1 Running 0 31m 10.244.4.7 node2 <none> <none> master1 ~]# kubectl -n develop get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE pod-deployment ClusterIP 10.111.188.179 <none> 80/TCP 31m master1 ~]# curl 10.111.188.179 kubernetes pod-test v0.1!! ClientIP: 192.168.10.26, ServerName: pod-deployment-59c85b5d69-zgbf4, ServerIP: 10.244.4.7! aster1 ~]# curl 10.244.3.9 kubernetes pod-test v0.1!! ClientIP: 192.168.10.26, ServerName: pod-deployment-59c85b5d69-fmxfd, ServerIP: 10.244.3.9! master1 ~]# curl 10.244.3.10 kubernetes pod-test v0.1!! ClientIP: 192.168.10.26, ServerName: pod-deployment-59c85b5d69-qr26z, ServerIP: 10.244.3.10! master1 ~]# curl 10.244.4.7 kubernetes pod-test v0.1!! ClientIP: 192.168.10.26, ServerName: pod-deployment-59c85b5d69-zgbf4, ServerIP: 10.244.4.7!
3.2.4、删除创建的networkpolicies
# 删除掉,继续下一个示例
kubectl -n develop delete networkpolicies allow-all-ingress
3.2.5、总结
所有的pod都可以相互访问
3.3、流量管控策略-设置只允许当前命名空间所有流量允许访问
3.3.1、定义资源配置清单
kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all-ingress namespace: develop spec: podSelector: {} policyTypes: ["Ingress", "Egress"] egress: - to: - podSelector: {} ingress: - from: - podSelector: {} EOF 配置解析: 虽然设置了egress和ingress属性,但是下面的podSelector没有选择节点,表示只有当前命名空间所有节点不受限制
3.3.2、查看创建的资源
master1 ~]# kubectl -n develop get networkpolicies NAME POD-SELECTOR AGE allow-all-ingress <none> 13m deny-all-ingress <none> 22m
3.3.3、进入kube-system命令空间POD,访问不了svc ip
master2 ~]# kubectl get svc -n develop NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE pod-deployment ClusterIP 10.111.188.179 <none> 80/TCP 48m master1 ~]# kubectl get pods -o wide -n develop NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-deployment-59c85b5d69-fmxfd 1/1 Running 0 59m 10.244.3.9 node1 <none> <none> pod-deployment-59c85b5d69-qr26z 1/1 Running 0 59m 10.244.3.10 node1 <none> <none> pod-deployment-59c85b5d69-zgbf4 1/1 Running 0 59m 10.244.4.7 node2 <none> <none> # 命名空间:kube-system,svc访问不了 master1 ~]# kubectl run pod-test --image=192.168.10.33:80/k8s/my_nginx:v1 -n kube-system --rm -it --command -- /bin/bash root@pod-test:/# curl --connect-timeout 2 10.111.188.179 curl: (28) Connection timed out after 2001 milliseconds
3.3.4、进入develop命令空间POD,可以访问svc ip
master2 ~]# kubectl get svc -n develop NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE pod-deployment ClusterIP 10.111.188.179 <none> 80/TCP 48m master1 ~]# kubectl get pods -o wide -n develop NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-deployment-59c85b5d69-fmxfd 1/1 Running 0 59m 10.244.3.9 node1 <none> <none> pod-deployment-59c85b5d69-qr26z 1/1 Running 0 59m 10.244.3.10 node1 <none> <none> pod-deployment-59c85b5d69-zgbf4 1/1 Running 0 59m 10.244.4.7 node2 <none> <none> # 命名空间:develop,svc是可以访问的 root@pod-test:/# curl --connect-timeout 2 10.111.188.179 kubernetes pod-test v0.1!! ClientIP: 10.244.4.17, ServerName: pod-deployment-59c85b5d69-qr26z, ServerIP: 10.244.3.10!
3.3.5、删除创建的networkpolicies
# 删除掉,继续下一个示例
kubectl -n develop delete networkpolicies deny-all-ingress
3.3.6、总结
只有同名空间的资源可以正常访问,而跨ns的资源是无法被访问
3.4、流量管控策略-使用标签选择器限制访问
当前仅容器隧道网络模型的集群支持网络策略(NetworkPolicy)。 更多参考华为云文档:https://support.huaweicloud.com/usermanual-cce/cce_01_0059.html
3.4.1、定义资源配置清单
kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all-ingress namespace: develop spec: podSelector: {} policyTypes: ["Ingress", "Egress"] egress: - to: - podSelector: {} ingress: - from: - ipBlock: cidr: 10.244.0.0/16 except: - 10.244.4.16/32 - podSelector: matchLabels: run: pod-test1 ports: - protocol: TCP port: 80 EOF 配置解析: 1、虽然设置了egress和ingress属性,但是spec.podSelector没有选择节点,表示只有当前命名空间所有节点不受限制,如果配置的话,就是限定哪些pod的入口。 2、通过标签选择可访问的入口“run: pod-test1”。
2.4.2、查询创建结果
master1 ~]# kubectl -n develop get networkpolicies NAME POD-SELECTOR AGE deny-all-ingress <none> 37s
3.4.3、运行pod
kubectl run my-web-test --image=192.168.10.33:80/k8s/pod_test:v0.1 -n develop
master1 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-test 1/1 Running 0 42s 10.244.4.43 node2 <none> <none>
3.4.4、创建两个不同标签的pod
master1 ~]# kubectl run pod-test --image=192.168.10.33:80/k8s/my_nginx:v1 -n develop --rm -it --command -- /bin/bash master1 ~]# kubectl run pod-test1 --image=192.168.10.33:80/k8s/my_nginx:v1 -n develop --rm -it --command -- /bin/bash
3.4.5、查询pod的创建结果
master3 ~]# kubectl get pod -n develop --show-labels NAME READY STATUS RESTARTS AGE LABELS pod-test 1/1 Running 0 111s run=pod-test pod-test1 1/1 Running 0 100s run=pod-test1
3.4.6、在两个pod中分别访问svc ip
root@pod-test1 # curl 10.96.80.213 kubernetes pod-test v0.1!! ClientIP: 10.244.5.18, ServerName: pod-deployment76dd67889b-s4m69, ServerIP: 10.244.6.11! root@pod-test1 # nslookup 10.96.80.213 ;; connection timed out; no servers could be reached root@pod-test # curl 10.96.80.213 curl: (28) Failed to connect to 10.96.80.213 port 80: Operation timed out 结果显示: 在 pod-test 中无法执行 curl 10.96.80.213 pod-test1 可以正常访问svc的ip地址,由于出栈的时候没有办法对dns域名进行解析,所以无法curl域名
3.4.7、修改资源配置清单-解决DNS无法解析的问题
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: egress-controller namespace: develop spec: podSelector: matchLabels: run: pod-test1 policyTypes: ["Egress"] egress: - to: ports: - protocol: UDP port: 53 - to: - podSelector: matchLabels: run: pod-test1 ports: - protocol: TCP port: 80
3.4.8、删除创建的networkpolicies
# 删除掉,继续下一个示例
kubectl -n develop delete networkpolicies deny-all-ingress
3.5、流量管控策略-使用命名空间限制访问
3.5.1、需求
大量的规则,会导致我们无法正常工作,或者艰难工作。 - 多个规则可能导致冲突、重复 - 多个规则的先后执行顺序导致结果不一样 所以我们在定制规则的时候,最好放到一个配置文件中。或者所有的规则都是经过精心管理和模块化管理的时候。而名称空间的控制就属于一种模块化管理方式。
3.5.2、查看命名空间的标签
master1 ~]# kubectl get ns --show-labels NAME STATUS AGE LABELS default Active 23h kubernetes.io/metadata.name=default develop Active 23m kubernetes.io/metadata.name=develop kube-node-lease Active 23h kubernetes.io/metadata.name=kube-node-lease kube-public Active 23h kubernetes.io/metadata.name=kube-public kube-system Active 23h kubernetes.io/metadata.name=kube-system
3.5.3、定义资源配置清单
kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: ingress-controller namespace: develop spec: podSelector: {} policyTypes: ["Ingress"] ingress: - from: - namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: In values: [develop, kube-system, logs] - from: - namespaceSelector: matchExpressions: - {key: kubernetes.io/metadata.name, operator: NotIn, values: ["default"]} EOF
3.5.4、查看pod和svc ip地址
master1 ~]# kubectl get pod -o wide -n develop NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-deployment-59c85b5d69-4jd2h 1/1 Running 0 28m 10.244.4.31 node2 <none> <none> pod-deployment-59c85b5d69-7fnhh 1/1 Running 0 28m 10.244.3.22 node1 <none> <none> pod-deployment-59c85b5d69-hj5nq 1/1 Running 0 28m 10.244.3.23 node1 <none> <none> pod-test 1/1 Running 0 20m 10.244.3.24 node1 <none> <none> master1 ~]# kubectl get svc -o wide -n develop NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR pod-deployment ClusterIP 10.98.89.69 <none> 80/TCP 28m app=pod-deployment
3.5.5、使用default,测试访问不了
master1 ~]# kubectl run pod-test --image=192.168.10.33:80/k8s/my_nginx:v1 -n develop --rm -it --command -- /bin/bash root@pod-test:/# curl --connect-timeout 2 10.98.89.69 kubernetes pod-test v0.1!! ClientIP: 10.244.4.35, ServerName: pod-deployment-59c85b5d69-7fnhh, ServerIP: 10.244.3.22!
3.5.6、使用develop,测试可以访问
master1 ~]# kubectl run pod-test --image=192.168.10.33:80/k8s/my_nginx:v1 --rm -it --command -- /bin/bash root@pod-test:/# curl --connect-timeout 2 10.98.89.69 curl: (28) Connection timed out after 2001 milliseconds
3.5.7、删除创建的networkpolicies
# 删除掉,继续下一个示例
kubectl -n develop delete networkpolicies ingress-controller
4、Calico之GlobalNetworkPolicy-实践
4.1、基础知识
4.1.1、问题
尽管k8s自己的NetworkPolicy功能上日渐丰富,但k8s自己的NetworkPolicy资源仍然具有相当的
局限性,例如它没有明确的拒绝规则、缺乏对选择器高级表达式的支持、不支持应用层规则,以及没有集群范围的网络策略等。
根据我们的实践可知,每个networkpolicy都是以当前命名空间为中心,进行的网络策略控制。如果命
名空间过多的话,会导致我们无法正常工作,或者艰难工作。 而这属于k8s网络管控的固有缺陷。
4.1.2、资源对象
我们安装完毕calico之后,会自动生成一些自定义的资源对象,这些资源对象包括NetworkPolicy和GlobalNetworkPolicy等. master1 ~]# kubectl api-resources | grep -i globalnetworkpolicies globalnetworkpolicies crd.projectcalico.org/v1 false GlobalNetworkPolicy
4.1.3、GlobalNetworkPolicy与NetworkPolicy对比
其中的NetworkPolicy CRD比Kubernetes NetworkPolicy API提供了更大的功能集,包括支持拒绝规则、规则解析级别以及应用层规则等,但相关的规则需要由calicoctl创建。
以GlobalNetworkPolicy为例,它支持使用selector、serviceAccountSelector或namespaceSelector来选定网络策略的生效范围,默认为all(),即集群上的所有端点。
高级场景:
转发流量、防御DOS
资源 解析
NetworkPolicy 简称 np ;是命名空间级别资源。规则应用于与标签选择器匹配的endpoint的集合
GlobalNetworkPolicy 简称 gnp / gnps 与 NetworkPolicy 功能一样,是整个集群级别的资源
4.2、根据命名空间限制网络
4.2.1、定义资源配置清单
# 限定命令空间标签为name=develop的网络策略,允许标签name=develop和name=kube-system访问 kubectl apply -f - <<EOF apiVersion: crd.projectcalico.org/v1 kind: GlobalNetworkPolicy metadata: name: namespaces-default spec: order: 0.0 namespaceSelector: name in {"develop"} types: ["Ingress", "Egress"] ingress: - action: Allow source: namespaceSelector: name in {"develop","kube-system"} egress: - action: Allow EOF
重点解析:
namespaceSelector: name in {"develop","kube-system"},此处的name表示命令空间的LABELS里面的name=develop所以,需要生效的话,需要给命令空间先打标签,否则会无效。
4.2.2、查询创建的结果
master1 ~]# kubectl get globalnetworkpolicies.crd.projectcalico.org -A
NAME AGE
namespaces-default 4s
4.2.3、给命名空间kube-system、develpo打标签
kubectl label ns develop name=develop kubectl label ns kube-system name=kube-system master1 ~]# kubectl get ns -o wide --show-labels NAME STATUS AGE LABELS default Active 36h kubernetes.io/metadata.name=default develop Active 12h kubernetes.io/metadata.name=develop,name=develop kube-node-lease Active 36h kubernetes.io/metadata.name=kube-node-lease kube-public Active 36h kubernetes.io/metadata.name=kube-public kube-system Active 36h kubernetes.io/metadata.name=kube-system,name=kube-system # 删除标签的方法 kubectl label ns develop name- kubectl label ns kube-system name-
4.2.4、运行pod
master1 ~]# kubectl run pod-test --image=192.168.10.33:80/k8s/pod_test:v0.1 -n develop pod/pod-test created master1 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-test 1/1 Running 0 99s 10.244.4.37 node2 <none> <none>
4.2.5、运行default命令空间测试-访问不了
master1 ~]# kubectl run nginx-test --image=192.168.10.33:80/k8s/my_nginx:v1 -n default --rm -it --command -- /bin/bash root@nginx-test:/# curl --connect-timeout 2 10.244.3.43 curl: (28) Connection timed out after 2001 milliseconds
4.2.6、运行kube-system命令空间测试-可以访问
master1 ~]# kubectl run nginx-test --image=192.168.10.33:80/k8s/my_nginx:v1 -n kube-system --rm -it --command -- /bin/bash root@nginx-test:/# curl --connect-timeout 2 10.244.3.43 kubernetes pod-test v0.1!! ClientIP: 10.244.4.75, ServerName: pod-test, ServerIP: 10.244.3.43!
4.2.7、运行develop命令空间测试-可以访问
master1 ~]# kubectl run nginx-test --image=192.168.10.33:80/k8s/my_nginx:v1 -n develop --rm -it --command -- /bin/bash root@nginx-test:/# curl --connect-timeout 2 10.244.3.43 kubernetes pod-test v0.1!! ClientIP: 10.244.4.74, ServerName: pod-test, ServerIP: 10.244.3.43!