我正在私有实验室中部署k8s,并在k8s服务中使用-外部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-主节点)卷起端点。如果我使用其他节点(与K8s主节点相同的子网),curl将无法工作。
运行tcpdump,我可以看到http请求正在通过,但没有答复。
外部IP在服务中是如何工作的?
发布于 2019-02-25 11:56:02
如果您检查github中的kubectl源代码,您会发现external-ip只记录在kubectl expose中,描述如下:
Cmd.Flags().String(“external”,"",i18n.T)(“额外的外部IP地址(不是由Kubernetes管理)来接受服务,如果这个IP被路由到一个节点,除了它生成的服务IP之外,这个IP还可以访问该服务”)。
当向服务添加external-ip参数时,Kubernete可能什么也不做,因为它不管理这个IP的行为,也不管理它在集群中的路由。它只是假设这个IP将被路由到集群中的一个节点。它将被视为与生成的服务IP相同。
要使外部IP工作,应该应用类似于服务类型LoadBalancer或NodePort的配置。我认为这只是一个注释的目的。
https://stackoverflow.com/questions/48602528
复制相似问题