Ip 如果在kubernetes群集中将externalTrafficPolicy设置为Local,为什么无法访问服务
我按照指南将源ip特性应用到我的kubernetes集群 首先,我通过运行创建了一个pod:Ip 如果在kubernetes群集中将externalTrafficPolicy设置为Local,为什么无法访问服务,ip,client,kubernetes,Ip,Client,Kubernetes,我按照指南将源ip特性应用到我的kubernetes集群 首先,我通过运行创建了一个pod: $kubectl运行源ip应用程序--image=gcr.io/google\u containers/echoserver:1.4 然后将其作为节点端口服务公开: kubectl公开部署源ip应用程序--name=nodeport--port=80--target port=8080--type=nodeport 此时,我可以从集群外部访问服务,并获得正确的客户端地址: $curl 10.74.68.
$kubectl运行源ip应用程序--image=gcr.io/google\u containers/echoserver:1.4
然后将其作为节点端口服务公开:
kubectl公开部署源ip应用程序--name=nodeport--port=80--target port=8080--type=nodeport
此时,我可以从集群外部访问服务,并获得正确的客户端地址:
$curl 10.74.68.49:16860 | grep客户端%总接收百分比%x平均速度时间电流
数据加载上载总左速度
10029620960431670——:——:——:——:——:——:——49333
客户地址=10.168.193.130 但如果应用源ip功能:
kubectl补丁svc节点端口-p'{“spec”:{“externalTrafficPolicy”:“Local”}'
我将获得超时:
$curl 10.74.68.49:16860 | grep客户端%总接收百分比%x平均速度时间电流
数据加载上载总左速度
0 0 0 0 0--::--0:01:14--::--:--0URL:(7)连接到10.74.68.49端口16860失败:操作超时 我想知道这背后的原因是什么,以及如何解决它 我的环境信息: $kubectl版本
客户端版本:Version.Info{Major:“1”,Minor:“7”,GitVersion:“v1.7.3”,GitCommit:“2c2fe6e8278a5db2d15a013987b53968c743f2a1”,gittrestate:“clean”,BuildDate:“2017-08-03T07:00:21Z”,GoVersion:“go1.8.3”,编译器:“gc”,平台:“linux/amd64”}
服务器版本:Version.Info{Major:“1”,Minor:“7”,GitVersion:“v1.7.3”,GitCommit:“2c2fe6e8278a5db2d15a013987b53968c743f2a1”,gittrestate:“clean”,BuildDate:“2017-08-03T06:43:48Z”,政府版本:“go1.8.3”,编译器:“gc”,平台:“linux/amd64”} 更新: 我的群集有2个节点,无论访问哪个节点ip,我都会遇到超时问题。Create kube-proxy.yaml
kubectl get ds-n kube系统kube proxy-o yaml>kube proxy.yaml
编辑kube proxy.yaml
以包含HOST\u IP
参数
更新播客:
kubectl apply-f kube proxy.yaml
这将应用中提到的修复程序,解决丢包问题 创建kube-proxy.yaml
kubectl get ds-n kube系统kube proxy-o yaml>kube proxy.yaml
编辑kube proxy.yaml
以包含HOST\u IP
参数
更新播客:
kubectl apply-f kube proxy.yaml
这将应用中提到的修复程序,解决丢包问题 教程文档说,如果服务没有本地端点,数据包将被丢弃,而不会被转发。您能否发布
kubectl get ep nodeport-o json | grep nodeName
@stacksonstacks的输出,谢谢您的评论。得到的终点是:“nodeName”:“10.74.68.48”,“nodeName”:“10.74.68.49”。集群部署时使用--hostname override=${ip}。根据,由于重命名,kube代理找不到本地端点。我正在想办法避免这种情况。因为在我的prod env中,主机名被覆盖。该线程说,每个kube代理上的设置--hostname override=${ip}
应该可以解决这个问题。您已经这样做并重新启动了kube代理吊舱吗?我正在尝试这样做,因为我的kube代理是一个守护程序,我正在研究如何将主机名覆盖传递给它。教程文档说,如果服务没有本地端点,包将被丢弃而不会转发。您能否发布kubectl get ep nodeport-o json | grep nodeName
@stacksonstacks的输出,谢谢您的评论。得到的终点是:“nodeName”:“10.74.68.48”,“nodeName”:“10.74.68.49”。集群部署时使用--hostname override=${ip}。根据,由于重命名,kube代理找不到本地端点。我正在想办法避免这种情况。因为在我的prod env中,主机名被覆盖。该线程说,每个kube代理上的设置--hostname override=${ip}
应该可以解决这个问题。你已经这样做并重新启动了kube代理吊舱吗?我正在尝试这样做,因为我的kube代理是一个守护程序,我正在研究如何将主机名覆盖传递给它。
# ...
spec:
containers:
- command:
- ./hyperkube
- proxy
- --cluster-cidr=10.2.0.0/16
- --hostname-override=$(HOST_IP)
- --kubeconfig=/etc/kubernetes/kubeconfig
- --proxy-mode=iptables
env:
- name: HOST_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.hostIP
#...