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= 的流量]
我正在尝试设置网络策略以仅允许从 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= 的流量]