【问题标题】:Kubernetes NetworkPolicies refused connectionKubernetes NetworkPolicies 拒绝连接
【发布时间】:2020-07-08 20:45:59
【问题描述】:

我尝试创造一个如图所示的情境。

kubectl run frontend --image=nginx --labels="app=frontend" --port=30081 --expose
kubectl run backend --image=nginx --labels="app=backend" --port=30082 --expose
kubectl run database --image=nginx --labels="app=database" --port=30082

我创建了网络策略,它应该阻止所有没有特定标签定义的入口和出口访问。

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: access-nginx
spec:
  podSelector:
    matchLabels:
     app: frontend
    matchLabels:
      app: backend
    matchLabels:
      app: database
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
        matchLabels:
          app: backend
        matchLabels:
          app: database
  egress:
  - to
    - podSelector:
        matchLabels:
          app: frontend
        matchLabels:
          app: backend
        matchLabels:
          app: database
  - ports:
    - port: 53
      protocol: UDP
    - port: 53
      protocol: TCP

我尝试在没有标签(命令 1)和正确标签(命令 2)的情况下连接到 pod 前端,如下所示。

  • kubectl run busybox --image=busybox --rm -it --restart=Never -- wget -O- http://frontend:30081 --timeout 2
  • kubectl run busybox --image=busybox --rm -it --restart=Never --labels=app=frontend -- wget -O- http://frontend:30081 --timeout 2

我预计第一个不使用标签的命令将被阻止,第二个命令将允许通信,但在按下第二个命令后我看到输出“wget:无法连接到远程主机(10.109.223.254):连接被拒绝” .我是否错误地定义了网络策略?

【问题讨论】:

标签: kubernetes kubernetes-networkpolicy


【解决方案1】:

正如 kubernetes documentation 关于网络策略中提到的那样

先决条件

网络政策由network plugin 实施。要使用网络策略,您必须使用支持 NetworkPolicy 的网络解决方案。在没有实现它的控制器的情况下创建 NetworkPolicy 资源将无效。

据我所知,katacoda 使用的 flannel 不支持网络策略。

controlplane $ kubectl get pods --namespace kube-system
NAME                                      READY   STATUS    RESTARTS   AGE
coredns-66bff467f8-4tmhm                  1/1     Running   0          16m
coredns-66bff467f8-v2dbj                  1/1     Running   0          16m
etcd-controlplane                         1/1     Running   0          16m
katacoda-cloud-provider-58f89f7d9-brnk2   1/1     Running   8          16m
kube-apiserver-controlplane               1/1     Running   0          16m
kube-controller-manager-controlplane      1/1     Running   0          16m
kube-flannel-ds-amd64-h5lrd               1/1     Running   1          16m
kube-flannel-ds-amd64-sdl4b               1/1     Running   0          16m
kube-keepalived-vip-gkhbz                 1/1     Running   0          16m
kube-proxy-6gd8d                          1/1     Running   0          16m
kube-proxy-zkldz                          1/1     Running   0          16m
kube-scheduler-controlplane               1/1     Running   1          16m

如上所述here

Flannel 专注于网络。对于网络策略,可以使用 Calico 等其他项目。

另外还有很好的tutorial,它显示了哪个 CNI 支持网络策略。

所以我想说,在 katacoda 操场上是不可能的。

【讨论】:

    猜你喜欢
    • 2020-11-06
    • 2016-02-02
    • 2021-10-22
    • 2018-10-19
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2019-08-16
    相关资源
    最近更新 更多