我正在私人实验室部署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如何在服务中工作?
答案 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,应使用与服务类型LoadBalancer
或NodePort
类似的配置。我认为这只是一个注释目的。