赞
踩
设置配置环境:
[candidate@node-1] $ kubectl config use-context hk8s
Task
在现有的 namespace my-app 中创建一个名为 allow-port-from-namespace 的新 NetworkPolicy。
确保新的 NetworkPolicy 允许 namespace echo 中的 Pods 连接到 namespace my-app 中的 Pods 的 9000 端口。
进一步确保新的 NetworkPolicy:
不允许对没有在监听 端口 9000 的 Pods 的访问 不允许非来自 namespace echo 中的 Pods 的访问
双重否定就是肯定,所以最后两句话的意思就是:
仅允许端口为 9000 的 pod 方法。
仅允许 echo 命名空间中的 pod 访问。
NetworkPolicy 的创建
依次点击 Concepts → Services, Load Balancing, and Networking → Network Policies(看不懂英文的,可右上角翻译成中文)
https://kubernetes.io/zh-cn/docs/concepts/services-networking/network-policies/
$ kubectl config use-context hk8s
# 查看所有 ns 的标签 label
$ kubectl get ns --show-labels
# 如果访问者的 namespace 没有标签 label,则需要手动打一个。如果有一个独特的标签 label,则也可以直接使用。
$ kubectl label ns echo project=echo
vim networkpolicy.yaml
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-port-from-namespace namespace: my-app #被访问者的命名空间 spec: podSelector: #这两行必须要写,或者也可以写成一行为 podSelector: {} matchLabels: {} # 注意 matchLabels:与{}之间有一个空格 policyTypes: - Ingress #策略影响入栈流量 ingress: - from: #允许流量的来源 - namespaceSelector: matchLabels: project: echo #访问者的命名空间的标签 label #- podSelector: {} #注意,这个不写。如果 ingress 里也写了- podSelector: {},则会导致 my-app 中的 pod 可以访问 my-app 中 pod 的 9000 了,这样不 满足题目要求不允许非来自 namespace echo 中的 Pods 的访问。 ports: - protocol: TCP port: 9000 #被访问者公开的端口
$ kubectl apply -f networkpolicy.yaml
$ kubectl describe networkpolicy -n my-app
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。