首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes出口规则阻止所有传出流量

Kubernetes出口规则阻止所有传出流量
EN

Stack Overflow用户
提问于 2022-02-19 10:21:34
回答 1查看 351关注 0票数 0

问题

我已经定义了一个kubernetes egress规则,从pod test-1到一个特定的pod test-2,但是这个规则也阻塞了从test-1test-2的通信量。

我已经创建了两个豆荚:test-2

  • I've和test-1创建了一个网络策略,该策略只允许从test-1test-2

  • I've的egress流量,试图通过curl test-2test-1调用test-2。但是这个调用是blocked!

  • I've检查了选择器

这两个选择器返回预期的结荚:

代码语言:javascript
复制
kubectl describe networkpolicies test-1-policy
kubectl get pod --selector app.kubernetes.io/name=test-1
kubectl get pod --selector app.kubernetes.io/name=test-2

当我移除networkpolicy时,curl test-2的连接可以工作。

我的问题:我错过了什么?

这里是如何重现问题

将yaml粘贴到文件deployment.yaml (请参阅below)

  • Deploy演示kubectl apply -f deployment.yaml

  • Exec到pod: pod中的kubectl exec --stdin --tty $(kubectl get pod -l app.kubernetes.io/name=test-1 -o jsonpath="{.items[0].metadata.name}") -- /bin/bash

  • Call请求:curl test-2 => 请求是blocked

  • Remove网络策略:pod中的kubectl delete networkpolicy test-1-policy

  • Exec和调用请求=> 请求是executed

)

以下是完整的yaml:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-1
  labels:
    app.kubernetes.io/name: test-1
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: test-1
  template:
    metadata:
      labels:
        app.kubernetes.io/name: test-1
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
            - name: http
              containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-2
  labels:
    app.kubernetes.io/name: test-2
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: test-2
  template:
    metadata:
      labels:
        app.kubernetes.io/name: test-2
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
            - name: http
              containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: test-1
  labels:
    app.kubernetes.io/name: test-1
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: http
      name: http
  selector:
    app.kubernetes.io/name: test-1
---
apiVersion: v1
kind: Service
metadata:
  name: test-2
  labels:
    app.kubernetes.io/name: test-2
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: http
      name: http
  selector:
    app.kubernetes.io/name: test-2
---
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: test-1-policy
spec:
  podSelector:
    matchLabels:
      app.kubernetes.io/name: test-1
  policyTypes:
    - Ingress
    - Egress
  ingress: []
  egress:
    - to:
        - podSelector:
            matchLabels:
              app.kubernetes.io/name: test-2
      ports:
        - port: 80
          protocol: TCP
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-19 15:41:21

缺少dns egress规则:

当您为egress添加port 53规则时,一切都如预期的那样工作:

代码语言:javascript
复制
  egress:
    - ports:
      - port: 53
        protocol: UDP
      - port: 53
        protocol: TCP

https://github.com/ahmetb/kubernetes-network-policy-recipes/blob/master/11-deny-egress-traffic-from-an-application.md

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71184041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档