模拟题目:

设置配置环境: [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访问。


参考:

https://kubernetes.io/zh-cn/docs/concepts/services-networking/network-policies/ 概念 --> 服务 负载均衡和联网 --> 网络策略


解答:

考试的时候务必记住切换集群, 注意集群名称 kubectl config use-context k8s

# 查看 命名空间的 标签
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:
    matchLabels: {}  # 这两行必须写,也可写成   podSelector: {}

  policyTypes:
  - Ingress   # 策略影响入栈流量
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          project: echo #访问者的命名空间标签 
      ports:
        - protocol: TCP
          port: 9000 # 被访问者的 端口
kubectl apply -f networkpolicy.yaml

检查:
kubectl describe networkpolicy -n my-app