题目
Task
创建一个名为 pod-restriction 的 NetworkPolicy 来限制对在 namespace dev-team 中运行的 Pod products-service 的访问。
只允许以下 Pod 连接到 Pod products-service:
1.namespace qaqa 中的 Pod
2.位于任何 namespace,带有标签 environment: testing 的 Pod
注意:确保应用 NetworkPolicy。
环境搭建
创建命名空间
命令
kubectl create ns dev-team kubectl create ns qaqa
截图
创建products-service
命令
kubectl run products-service --image=nginx --dry-run=client -o yaml > products-service.yaml
修改products-service.yaml
apiVersion: v1 kind: Pod metadata: labels: run: products-service name: products-service spec: containers: - image: nginx imagePullPolicy: IfNotPresent name: products-service resources: {} dnsPolicy: ClusterFirst restartPolicy: Always status: {}
命令
kubectl create -f products-service.yaml -n dev-team
截图
pod打标签(default下的busybox-demo,请读者自行创建)
命令
kubectl label po busybox-demo environment=testing
截图
解题
pod-restriction.yaml
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: pod-restriction namespace: dev-team spec: podSelector: matchLabels: run: products-service policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: qaqa - from: - namespaceSelector: {} podSelector: matchLabels: environment: testing
解释:对于dev-team命名空间下标签打了run=products-service的Pod的如流量进行限制,打了kubernetes.io/metadata.name=qaqa标签的命名空间下的Pod都可以访问,打了environment=testing标签的Pod都可以访问。
namespaceSelector不写时默认为当前命名空间,若任意命名空间,需要写空
模拟题
参考
k8s学习-网络策略NetworkPolicy(概念、模版、创建、删除等)
更多k8s相关内容,请看文章:k8s学习-思维导图与学习笔记