我已使用以下配置安装kubernetes 1.2.0
export nodes="user@10.0.0.30 user@10.0.0.32"
export role="ai i"
export NUM_NODES=2
export SERVICE_CLUSTER_IP_RANGE=192.168.3.0/24
export FLANNEL_NET=172.16.0.0/16
export KUBE_PROXY_EXTRA_OPTS="--proxy-mode=iptables"
我已经创建了一个nginx pod并使用负载均衡器和外部IP地址公开
kubectl expose pod my-nginx-3800858182-6qhap --external-ip=10.0.0.50 --port=80 --target-port=80
我在裸机上使用kubernetes,所以我已经将10.0.0.50 ip分配给主节点。
如果我尝试curl 10.0.0.50(来自外部kubernetes)并在nginx pod上使用tcpdump我看到流量,源ip始终来自kubernetes主节点
17:30:55.470230 IP 172.16.60.1.43030 > 172.16.60.2.80: ...
17:30:55.470343 IP 172.16.60.2.80 > 172.16.60.1.43030: ...
我正在使用mode-proxy = iptables。并需要获得实际的源IP。我做错了什么?
答案 0 :(得分:1)
这是作为Kubernetes 1.5(文档here)中的注释添加的。
在1.7中,它已经毕业于GA,因此您可以使用spec.externalTrafficPolicy
字段(文档here)在服务上指定负载平衡策略:
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "example-service",
},
"spec": {
"ports": [{
"port": 8765,
"targetPort": 9376
}],
"selector": {
"app": "example"
},
"type": "LoadBalancer",
"externalTrafficPolicy": "Local"
}
}
答案 1 :(得分:0)
不幸的是,你没有做错任何事。它是如何从接收它们到目标容器的机器代理数据包的工件。
在very long Github issue中围绕这个问题进行了大量讨论,但除了在Kubernetes集群之外运行前端负载均衡器之外,还没有找到解决方案(比如使用云负载均衡器) ,附加X-FORWARDED-FOR标题)。