我有一个类型为'ClusterIp'的api服务,它可以正常工作,并且可以在具有clusterip的节点上访问。我想从外部访问它。这是kubeadm的裸机安装。我无法使用Loadbalancer或Nodeport。
如果我也使用nginx-ingress,我也将用作'ClusterIP',因此,如何在api服务或nginx-ingress情况下从外部访问该服务。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
api ClusterIP 10.97.48.17 <none> 80/TCP 41s
ingress-nginx ClusterIP 10.107.76.178 <none> 80/TCP 3h49m
对于裸机集群,您可以使用以下任何一种方法在外部提供服务。建议从最不推荐的顺序到最不推荐的顺序:
使用metallb
来实现LoadBalancer服务类型支持-https://metallb.universe.tf/。您将需要一个IP地址池,以便Metallb分发。
使用NodePort服务。您可以从任何node_IP:node_port地址访问服务。默认情况下,NodePort服务会在节点端口范围内选择随机端口。您可以使用nodePort
字段在节点端口范围内选择一个自定义端口。
缺点:默认情况下,节点端口范围是30000-32767。因此,您无法像8080那样绑定到您想要的任何自定义端口。
使用hostPort绑定节点上的端口。
缺点:您没有固定的IP地址,因为除非使用nodeAffinity
,否则您不知道Pod被调度到哪个节点。如果希望从给定端口上的所有节点均可访问它,则可以将pod设置为守护程序集。