我有一个运行 Calico 作为覆盖和 NetworkPolicy 实现的 Kubernetes 集群,为 IP-in-IP 封装配置,我正在尝试使用以下服务公开一个简单的 nginx 应用程序:
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
app: nginx
我正在尝试编写一个仅允许通过负载均衡器进行连接的 NetworkPolicy。在没有覆盖的集群上,这可以通过允许来自用于将 IP 分配给工作程序实例本身的 CIDR 的连接来实现 - 这允许连接在特定工作程序上访问服务的 NodePort 并转发到后面的容器之一通过 IPTables 规则服务。但是,当使用配置为 IP-in-IP 的 Calico 时,通过 NodePort 建立的连接使用 Calico 的 IP-in-IP 隧道 IP 地址作为跨节点通信的源地址,如此ipv4IPIPTunnelAddr
处 Calico Node 对象上的字段所示(I通过观察通过负载均衡器连接到 nginx 应用程序的源 IP 来推断这一点)。因此,我的 NetworkPolicy 需要允许这样的连接。
我的问题是如何在不ipv4IPIPTunnelAddr
事先知道值且不允许来自集群中所有 Pod 的连接的情况下允许这些类型的连接(因为这些ipv4IPIPTunnelAddr
值是从集群的 Pod CIDR 范围中提取的)。如果工作实例出现并死亡,这些 IP 的列表肯定会发生变化,我不希望我的 NetworkPolicy 规则依赖于它们。
- 印花布版本:3.1.1
- Kubernetes 版本:1.9.7
- 等版本:3.2.17
- 云提供商:AWS