Kubernetes:服务外部IP无法正常工作

时间:2018-02-03 22:04:11

标签: kubernetes

我正在私人实验室部署k8s并在k8s服务中使用--external-ip选项:

Name:              my-service
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          app=myapp
Type:              ClusterIP
IP:                10.98.4.250
External IPs:      10.10.16.21
Port:              http  80/TCP
TargetPort:        80/TCP
Endpoints:         192.168.237.3:80

Session Affinity:  None
Events:            <none>


user@k8s-master:~$ kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP   22h
my-service   ClusterIP   10.98.4.250   10.10.16.21   80/TCP    7m

但我只能通过外部IP从同一节点(k8s-master)卷曲端点。如果我使用其他节点(与k8s-master相同的子网),curl将无效。

运行tcpdump,我可以看到http请求即将到来,但没有回复。

外部IP如何在服务中工作?

1 个答案:

答案 0 :(得分:1)

如果检查github中的kubectl源代码,则会发现external-ip仅记录在kubectl expose中,其描述如下:

  

cmd.Flags()。String(“ external-ip”,“”,i18n.T(“其他外部IP   服务接受的地址(不受Kubernetes管理)。如果这   IP已路由到节点,该IP中的服务可以访问   除了其生成的服务IP。”))

在向服务添加external-ip参数时,Kubernete可能不执行任何操作,因为它不管理该IP的行为,也不管理其在集群中的路由。仅假设此IP将被路由到群集中的节点。它将与生成的服务IP相同。

要使用外部IP,应使用与服务类型LoadBalancerNodePort类似的配置。我认为这只是一个注释目​​的。