我有一个主服务器和一个工人Kubernetes集群,其Calico从here部署,清单没有变化。主服务器的内部IP地址为10.132.0.30
,我正尝试在主服务器上公开我的服务(在工作服务器上运行),如下所示:
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: ClusterIP
externalIPs: [10.132.0.30]
ports:
- port: 80
targetPort: 80
selector:
app: nginx
来自主机的 curl http://10.132.0.30
可以正常工作,但是即使我可以看到使用tcpdump
的连接,也无法将笔记本电脑中的主机从其外部IP地址卷曲到主机上。
# tcpdump -i eth0 dst 10.132.0.30 and dst port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
22:52:16.692059 IP cpc102582-walt20-2-0-cust85.13-2.cable.virginm.net.62882 > fail5-luke-master.c.jetstack-luke.internal.http: Flags [S], seq 3014275997, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 181016377 ecr 0,sackOK,eol], length 0
...
在其他接口上运行其他tcpdump
命令似乎数据包正在到达nginx但没有返回(cali3561fc118c0
是我的nginx Pod在根网络名称空间中的工作器上的接口,并且192.168.1.4
是其分配的IP):
# tcpdump -i cali3561fc118c0 dst 192.168.1.4
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on cali3561fc118c0, link-type EN10MB (Ethernet), capture size 262144 bytes
23:00:23.626170 IP 192.168.0.1.65495 > 192.168.1.4.http-alt: Flags [S], seq 2616662679, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 181480911 ecr 0,sackOK,eol], length 0
...
我想可能有很多问题,但是有什么明显的我想念的吗?
编辑:我没有任何运气,而是遵循了Calico文档here的建议
Kubernetes版本:1.13.4
答案 0 :(得分:0)
我没有在--cluster-cidr
上设置kube-proxy
。设置此设置意味着kube-proxy
会伪装外部流量,否则返回路径将是不对称的(它总是在节点外向工作人员反弹):https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/iptables/proxier.go#L841-L845