首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在kubernetes网络策略中实现数字海洋负载均衡?

如何在kubernetes网络策略中实现数字海洋负载均衡?
EN

Stack Overflow用户
提问于 2020-09-21 07:52:40
回答 1查看 714关注 0票数 0

我已经在命名空间中配置了下一个网络策略:

代码语言:javascript
复制
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: np-testing-allow
  namespace: testing
spec:
  podSelector: {}
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          purpose: monitoring
    - namespaceSelector:
        matchLabels:
          purpose: ci
    - namespaceSelector:
        matchLabels:
          environmentName: testing

但在那之后,nginx入口的负载平衡器就坏了。如何在网络策略中白名单管理负载均衡器?

我已经尝试过白名单VPC,CIDR和负载平衡器的公共IP,但它没有帮助

我想要达到的目标是:必须允许使用“测试”命名空间"ci“和”监视“名称空间,但同时我希望允许来自Digitalocean负载均衡器的通信量。

您想从哪个名称空间发送流量?我的问题仅与入口流量有关,我们希望允许来自数字海洋负载均衡器的传入流量。

你的入口处在哪里?在“测试”命名空间中

你想要从你的nginx入口舱到另一个Namespace上的豆荚的流量吗?不,我们只需要“测试”名称空间内的通信量。

在“测试”命名空间网络策略中应该白化什么以及应该在哪里白化DigitalOcean负载均衡器

EN

回答 1

Stack Overflow用户

发布于 2020-09-25 08:26:21

免责声明:我无权访问DigitalOcean。我在GCP上使用我的k8s 1.18.2集群进行了分析和测试。确保您也可以在DigitalOcean上满足DigitalOcean的要求:

网络策略由网络插件实现。要使用网络策略,必须使用支持NetworkPolicy的网络解决方案。如果没有实现NetworkPolicy资源的控制器,就不会产生任何效果。

有一些资源可以帮助你实现你的目标。首先,查看本指南:允许来自外部客户端的通信

此网络策略允许来自公共Internet的外部客户端直接或通过负载均衡器访问吊舱。

为了工作,Service type=LoadBalancerIngress资源都必须允许这些资源选择的豆荚的所有通信量。

请参见下面的示例

代码语言:javascript
复制
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: web-allow-external
spec:
  podSelector:
    matchLabels:
      app: web
  ingress:
  - from: []

以下清单允许来自所有源的通信(包括来自集群的内部通信和来自外部的通信)。

我已经按照以下步骤复制了您的用例:

  1. 安装了Nginx并将其标记为purpose=testing
  2. 创建并标记以下名称空间:ingress-nginxpurpose=testingmonitoringpurpose=monitoringcipurpose=ci
  3. deploymentservice应用于defaultingress-nginxmonitoringci名称空间:
代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my1
  namespace: <one_of_the_listed_above>
spec:
  selector:
    matchLabels:
      run: my1
  replicas: 2
  template:
    metadata:
      labels:
        run: my1
    spec:
      containers:
      - name: my1
        image: nginx
        ports:
        - containerPort: 80
代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: my1
  namespace: <one_of_the_listed_above>
  labels:
    run: my1
spec:
  ports:
  - port: 80
    protocol: TCP
  selector:
    run: my1
  1. 创建了一个信息母题:
代码语言:javascript
复制
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my1
  namespace: ingress-nginx
  annotations:
    # If the class annotation is not specified it defaults to "gce".
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: my1
          servicePort: 80
  1. 验证名称空间和负载均衡器之间的连接性。
  2. 创建了以下NetworkPolicy
代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-monitoring-ci
  namespace: ingress-nginx
spec:
  podSelector: {}
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          purpose: ci
  - from:
    - namespaceSelector:
        matchLabels:
          purpose: monitoring
  - from:
    - namespaceSelector:
        matchLabels:
          purpose: testing

有了上面的配置,ingress-nginx名称空间中的pod应该能够接收来自monitoringci名称空间的通信量。此外,它们将在内部接收ingress-nginx命名空间内的通信量,该名称空间被标记为testing

还要检查负载均衡器服务中的externalTrafficPolicy是否设置为LocalCluster。如果将其设置为Cluster,则该节点的IP将运行在该节点上。如果发生这种情况,还需要创建以下配置:

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-nginx-controller
  namespace: ingress-nginx
spec:
  podSelector:
     matchLabels:
      app.kubernetes.io/instance: ingress-nginx
  ingress:
  - from:
    - ipBlock:
        cidr: 0.0.0.0/0
        except: 
        - 10.16.0.0/14 #pod ip range

使用cidr: 0.0.0.0/0将允许所有传入的通信量,并添加except:将允许您根据DigitalOcean配置(我没有权限)调整您的需求。

还需要注意的是,在k8s v1.19中,apiVersion: networking.k8s.io/v1beta1 for In宿6被替换为v1。确保您正在使用正确的版本控制。

最后要记住的是,你也应该把这些政策用于出口,而不仅仅是进场。当阻塞出口时,您可能会遇到DNS解析的问题,这将要求您添加规则,以便荚能够向DNS发送请求。更多细节这里

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

https://stackoverflow.com/questions/63988163

复制
相关文章

相似问题

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