我试图在一个前提下使用NodePort公开一个服务,库伯内特斯(1.17)集群( CNI和CRI 1.17)
我可以使用IPv4成功地压缩服务,但不使用IPv6 (连接是建立的,但没有传输)。
kubectl describe svc/example-service
Name: example-service
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=helloworld
Type: NodePort
IP: 10.97.69.135
Port: <unset> 5000/TCP
TargetPort: 5000/TCP
NodePort: <unset> 32042/TCP
Endpoints: 10.10.166.132:5000
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>在运行此部署的主机上:
netstat -tulpen|grep ':32042'
tcp6 0 0 :::32042 :::* LISTEN 0 10276301 2314/kube-proxy kube-代理显然绑定到tcp6 (具有tcp4兼容性模式),因此可以建立连接,但是没有使用tcp6 (curl-6)、tcp4 (curl-4)进行预期的数据传输。
发布于 2020-03-10 15:13:32
是的,这就是双重堆栈的作用。它允许分配IPv6和IPv4地址。没有它,豆荚和服务将无法从一个或另一个IP协议。如果无法处理IP协议,DNS解析不足以实现适当的网络连接。
根据库伯奈特斯文档:
IPv6 4/IPv6 6双栈特性状态:
Kubernetes v1.16alpha IPv6 4/IPv6 6双堆栈允许将IPv4和IPv6地址分配给豆荚和服务。如果您为Kubernetes集群启用了IPv4 4/IPv4 6双堆栈网络,集群将支持同时分配IPv4和IPv6地址。
请注意,这是alpha特性,不适合生产环境。
另一种方法是使用IPv6终止模型。其中,IPv6流量通过代理发送到集群网络中的IPv4后端。来自GCP文档的示例。
可以只使用IPv6而不与IPv4一起使用。然而,也有一些限制。
根据卡利科文档:
要仅在kubernetes集群中启用IPv6,请使用此指南。
希望能帮上忙。
https://serverfault.com/questions/1006325
复制相似问题