带有微服务的Kubernetes网络策略

时间:2019-06-16 00:11:23

标签: kubernetes

问题:

使用Kubernetes的网络策略无法按预期运行(出口和入口似乎切换到我了吗?)更重要的是,我似乎无法在不阻止前端的情况下就阻止Web流量直接访问/ api /路由。 / p>

代码设置:

使用Axios与后端对话的前端(反应)。设置为微服务,并使用Ingress根据路由适当推送流量。外部托管数据库。

Kubernetes设置

  • 前端部署和服务
  • API部署和服务
  • 依赖于http路径的入口服务。
  • 集群外部的外部管理数据库。

有问题的网络政策:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: api-blocking
spec:
  podSelector:
    matchLabels:
      component: api
  policyTypes:
    - Ingress
    - Egress
  ingress:
    - from:
        - ipBlock:
            cidr: 111.111.111.0/32
      ports:
        - port: 98711
  egress:
    - to:
        - podSelector:
            matchLabels:
              component: frontend
      ports:
        - port: 3000

允许使用特定端口号的特定CIDR进入流量,可以适当地进行数据库提取。允许将流量发送到前端是使前端能够捕获后端数据的原因。

网络策略的任何组合都不会阻止用户在不折叠前端的情况下转到/ api /。希望找到一种方法来将其锁定并仅允许特定的客户端Pod连接到后端?

...。输入后,也许我需要针对入口服务的网络策略?

更新: 我尝试使用特定于网络插件的规则。

我编写规则的方式是只允许“前端”端点访问/ api / http路由用于入口和出口。似乎并没有阻止它通过API进入网络流量。

其中一部分带有占位符值的示例:

ingress:
    - fromEndpoints:
        - matchLabels:
            component: frontend
      toPorts:
        - ports:
            - port: '1111'
          rules:
            http:
              - path: '/api/ping'

1 个答案:

答案 0 :(得分:1)

  

在不阻止前端的情况下,我似乎无法阻止Web流量直接访问/ api /路由。

我认为使用标准网络策略对象是不可能的,因为它仅允许您根据pods, namespaces and IPs将流量列入白名单。

在我看来,Calico Network Policies(检查for Application layer policy)可能更细致。