eks calico 允许从 aws classic elb 入站到 pod

eks calico allow inbound from aws classic elb to pod

我正在尝试设置网络策略以仅允许从 aws classic 负载均衡器到 pods 的入站流量。没有其他东西应该能够与包含任何 pod 副本的 pods 对话。我已经配置了以下但它不起作用。有什么想法我想念的吗?一旦我应用它,负载均衡器的健康检查就会失败。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: a-b-c1
  labels:
    app: a-b-c1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: a-b-c1
  template:
    metadata:
      labels:
        app: a-b-c1
    spec:
      containers:
      - name: a-b-c1
        image: image:latest
        ports:
        - name: http-server1
          containerPort: 80
        resources:
          requests:
            cpu: 0.5
---
kind: Service
apiVersion: v1
metadata:
  name: a-b-c-elb1
  labels:
    app: a-b-c1
    name: a-b-c1-elb
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
    service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags: "environment=eks"
spec:
  ports: 
    - port: 80
      targetPort: http-server1
  selector:
    app: a-b-c1
  type: LoadBalancer
  loadBalancerSourceRanges:
  - 10.0.0.0/8
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-from-elb
spec:
  podSelector:
    matchLabels:
      app: a-b-c1
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          name: a-b-c1-elb

我认为这在 AWS 中是不可能的。

在此网络策略中,您将入口限制为标有 a-b-c1-elb 的 pods,但这并不代表服务,它仅代表标有 name: a-b-c1-elb 的假设 Pod(它是一个 podSelector 而不是 serviceSelector,遗憾的是它不存在)。

网络策略允许将流量与 pod 选择器、命名空间选择器 or/and IP 块进行匹配。在您的情况下,唯一可以完成这项工作的是 IP 块。您可以将流量限制在负载均衡器的 IP 上,这样就可以了。

但是,在 AWS 中,负载均衡器具有临时 IP,可以随时更改,因此无法限制负载均衡器的流量。您最多只能限制到子网 CIDR 的流量。

也许作为发现这个问题的人的提示,我想这个问题的正确解决方案是使用入口控制器。

有了入口控制器,就可以创建仅允许流量来自入口控制器 pods 的网络策略,同时阻止来自所有其他 pods.[=10= 的流量]