Kubernetes:服务的外部IP无法工作

3

我正在私有实验室中部署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)对端点进行curl。如果我使用其他节点(与k8s-master相同的子网),curl将无法正常工作。

运行tcpdump,我可以看到http请求已经通过,但没有回复。

服务中的外部IP是如何工作的?

1个回答

2
如果你查看github中的kubectl源代码,你会发现在kubectl expose中只有external-ip有说明,描述如下:

cmd.Flags().String("external-ip", "", i18n.T("Additional external IP address (not managed by Kubernetes) to accept for the service. If this IP is routed to a node, the service can be accessed by this IP in addition to its generated service IP."))

当向一个service添加external-ip参数时,Kubernetes可能不会做任何事情,因为它不管理这个IP的行为和集群内的路由。它只是假设这个IP将被路由到集群中的一个节点上。它将被视为生成的service IP的相同处理方式。
要使外部IP正常工作,应该应用类似于Service类型的配置LoadBalancerNodePort。我认为这只是更多的注释目的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接