EKS Calico允许从AWS Classic Elb到Pod的入站

时间:2018-10-10 14:45:12

标签: kubernetes amazon-eks project-calico aws-eks

我正在尝试设置网络策略,以仅允许从AWS Classic负载均衡器到Pod的入站流量。没有其他应该能够与包含任何Pod副本的Pod通信的内容。我已经配置了以下内容,但是它不起作用。有什么想法我想念的吗?一旦应用此方法,负载平衡器上的运行状况检查就会失败。

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

1 个答案:

答案 0 :(得分:0)

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

在此网络策略中,您只能将进入限制为标有a-b-c1-elb的Pod,但这并不代表服务,只能代表标有name: a-b-c1-elb的假设Pod(它是podSelector,而不是serviceSelector,可惜不存在)。

网络策略允许使用Pod选择器,名称空间选择器或/和IP块匹配流量。在您的情况下,唯一可以完成此任务的是IP块。您可以将流量限制为负载均衡器的IP,这样就可以解决问题。

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