【问题标题】:Error with documentation ?? NetworkPolicy?文档错误??网络政策?
【发布时间】:2021-11-18 22:04:00
【问题描述】:

我浏览了 3 节点 K8 集群中的代码,似乎无法在部署 pod 上使用 networkpolicy 阻止流量。

这是练习的输出。

user@myk8master:~$ kubectl get deployment,svc,networkpolicy
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   X.X.X.X    <none>        443/TCP   20d
user@myk8master:~$
user@myk8master:~$
user@myk8master:~$ kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
user@myk8master:~$ kubectl expose deployment nginx --port=80
service/nginx exposed
user@myk8master:~$ kubectl run busybox --rm -ti --image=busybox -- /bin/sh
If you don't see a command prompt, try pressing enter.
/ # wget --spider --timeout=1 nginx
Connecting to nginx (X.X.X.X:80)
remote file exists
/ # exit
Session ended, resume using 'kubectl attach busybox -c busybox -i -t' command when the pod is running
pod "busybox" deleted
user@myk8master:~$
user@myk8master:~$
user@myk8master:~$ vi network-policy.yaml
user@myk8master:~$ cat network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: access-nginx
spec:
  podSelector:
    matchLabels:
      app: nginx
  ingress:
  - from:
    - podSelector:
        matchLabels:
          access: "true"

user@myk8master:~$
user@myk8master:~$
user@myk8master:~$ kubectl apply -f network-policy.yaml
networkpolicy.networking.k8s.io/access-nginx created
user@myk8master:~$
user@myk8master:~$
user@myk8master:~$ kubectl run busybox --rm -ti --image=busybox -- /bin/sh
If you don't see a command prompt, try pressing enter.
/ # wget --spider --timeout=1 nginx
Connecting to nginx (10.100.97.229:80)
remote file exists. <<<<  THIS SHOULD NOT WORK 

我按原样执行了所有步骤,但即使定义了网络策略,我似乎也无法阻止流量。

如果我在这里做一些愚蠢的事情,有人可以帮忙告诉我吗?

【问题讨论】:

  • 您使用什么 CNI? CNI 需要支持网络策略

标签: docker kubernetes google-kubernetes-engine kubernetes-ingress kubernetes-pod


【解决方案1】:

documentation 中所述,限制客户端访问应使用网络插件。由于某些冲突或故障,它可能不会限制访问。所以尝试重新安装/重新配置。

您也可以尝试其他方法,例如在NGINX 中阻止它们

您可以通过 IP 地址限制访问。 NGINX 可以根据特定 IP 地址或客户端计算机的 IP 地址范围允许或拒绝访问。要允许或拒绝访问,请在流上下文或服务器块中使用允许和拒绝指令:

 stream {
     #...
     server {
       listen 12345;
       deny   192.168.1.2;
       allow  192.168.1.1/24;
       allow  2001:0db8::/32;
       deny   all;
     }
   }

限制 TCP 连接数。您可以限制来自一个 IP 地址的同时 TCP 连接数:

 stream {
   #...
   limit_conn_zone $binary_remote_addr zone=ip_addr:10m;
   #...
  }

你还可以限制带宽和ip范围等,使用NGINX更灵活。

有关网络插件的更多信息,请参阅link

【讨论】:

  • 谢谢斯里维迪亚。由于我的是一个香草集群,我没想到配置错误。
【解决方案2】:

我的错。如文档中所述,我忘记设置任一受支持的网络服务。之后就完美运行了。

【讨论】:

    猜你喜欢
    • 2020-09-01
    • 2021-04-15
    • 2020-04-13
    • 2018-10-15
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多