我有以下网络策略来限制对前端服务页面的访问:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
namespace: namespace-a
name: allow-frontend-access-from-external-ip
spec:
podSelector:
matchLabels:
app: frontend-service
ingress:
- from:
- ipBlock:
cidr: 0.0.0.0/0
ports:
- protocol: TCP
port: 443
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0
ports:
- protocol: TCP
port: 443我的问题是:我是否可以使用出口规则(对443端口的限制)来执行HTTPS ?如果是,这是如何工作的?假设客户端连接到前端服务,客户端在其机器上为这个连接选择一个随机端口,Kubernetes如何知道该端口,或者集群中是否存在某种端口映射,因此返回客户端的流量位于端口443,并在离开集群时被映射回客户端原始端口?
发布于 2019-09-20 09:31:45
您可能对网络策略(NP)有错误的理解。
这是您应该如何解释本节:
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0
ports:
- protocol: TCP
port: 443打开端口443,用于0.0.0.0/0 cidr中所有豆荚的传出通信量。
你要问的是
Kubernetes是如何知道该端口的,或者集群中是否存在某种端口映射,以便返回到客户机的流量位于端口443,并在离开集群时被映射回客户端原始端口?
由kube代理以下列方式管理:
对于从荚到外部地址的通信量,Kubernetes只使用SNAT。它所做的是将pod的内部源IP:port替换为主机的IP:port。当返回数据包返回到主机时,它会重写pod的IP:port作为目的地,并将其发送回原来的pod。整个过程对原来的pod是透明的,他们根本不知道地址转换。
为了更好地理解,请看一下Kubernetes网络基础。
https://stackoverflow.com/questions/57687739
复制相似问题