Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ip 如果在kubernetes群集中将externalTrafficPolicy设置为Local,为什么无法访问服务_Ip_Client_Kubernetes - Fatal编程技术网

Ip 如果在kubernetes群集中将externalTrafficPolicy设置为Local,为什么无法访问服务

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.

我按照指南将源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.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
    #...