模拟题目

设置配置环境:

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