江
江小南
V1
2022/10/23阅读:96主题:默认主题
【CKA、CKS篇】CKA真题解析——配置网络策略 NetworkPolicy
真题解析
今天所说的内容需要对yaml编写有一定的了解。
题目:
在现有的namespace my-app中创建一个名为allow-port-from-namespace的新NetworkPolicy。
确保新的NetwoekPolicy允许namespace echo中的Pods连接到namespace my-app中的Pod的9000端口。
进一步确保新的NetworkPolicy: 不允许对没有在监听端口9000的Pod的访问; 不允许非来自namespace echo中的Pods的访问
考察点:
NetworkPolicy的创建。
解析:
-
在my-app名称空间下创建一个名为allow-port-from-namespace的NetworkPolicy。 -
这个NetworkPolicy允许echo名称空间下的Pods访问my-app名称空间下的Pods的9000端口。 -
仅允许端口为9000的pod访问。 -
仅允许echo名称空间中的Pod访问。
帮助文档:
https://kubernetes.io/zh-cn/docs/concepts/services-networking/network-policies/

实际操作:
-
查看所有 ns 的标签 label
candidate@node01:~$ kubectl get ns --show-labels
NAME STATUS AGE LABELS
app-team1 Active 33d kubernetes.io/metadata.name=app-team1
calico-apiserver Active 36d kubernetes.io/metadata.name=calico-apiserver,name=calico-apiserver
calico-system Active 36d kubernetes.io/metadata.name=calico-system,name=calico-system
cpu-top Active 33d kubernetes.io/metadata.name=cpu-top
default Active 36d kubernetes.io/metadata.name=default
echo Active 33d kubernetes.io/metadata.name=echo
ing-internal Active 33d kubernetes.io/metadata.name=ing-internal
ingress-nginx Active 33d kubernetes.io/metadata.name=ingress-nginx
internal Active 33d kubernetes.io/metadata.name=internal
kube-node-lease Active 36d kubernetes.io/metadata.name=kube-node-lease
kube-public Active 36d kubernetes.io/metadata.name=kube-public
kube-system Active 36d kubernetes.io/metadata.name=kube-system
my-app Active 33d kubernetes.io/metadata.name=my-app
tigera-operator Active 36d kubernetes.io/metadata.name=tigera-operator,name=tigera-operator
candidate@node01:~$
-
手动打标签
如果访问者的 namespace 没有标签 label,则需要手动打一个。如果有一个独特的标签 label,则也可以直接使用。
candidate@node01:~$ kubectl label ns echo project=echo
namespace/echo labeled
candidate@node01:~$
再次查看标签发现echo已经被打上了标签project=echo
。
candidate@node01:~$ kubectl get ns --show-labels
NAME STATUS AGE LABELS
...
echo Active 33d kubernetes.io/metadata.name=echo,project=echo
...
candidate@node01:~$
-
编写networkpolicy.yaml
注意:使用:set paste
,防止 yaml 文件空格错序。
# networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-port-from-namespace
namespace: my-app
spec:
podSelector:
matchLabels: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
project: echo
ports:
- protocol: TCP
port: 9000
candidate@node01:~$
-
创建
candidate@node01:~$ kubectl apply -f networkpolicy.yaml
networkpolicy.networking.k8s.io/allow-port-from-namespace created
candidate@node01:~$
-
检查验证
candidate@node01:~$ kubectl describe networkpolicy -n my-app
Name: allow-port-from-namespace
Namespace: my-app
Created on: 2022-08-20 11:09:55 +0800 CST
Labels: <none>
Annotations: <none>
Spec:
PodSelector: <none> (Allowing the specific traffic to all pods in this namespace)
Allowing ingress traffic:
To Port: 9000/TCP
From:
NamespaceSelector: project=echo
Not affecting egress traffic
Policy Types: Ingress
candidate@node01:~$
至此这道题目完成。
下一篇我们详细讲解networkPolicy扩展知识,包括yaml配置含义等。
作者介绍
江
江小南
V1