如何在裸机集群上从外部访问kubernetes服务

问题描述 投票:0回答:2

我有一个类型为'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
kubernetes kubeadm bare-metal-server
2个回答
0
投票

好吧,您可以通过读取名称来猜测,ClusterIp仅可从在集群内部访问。

要使服务可从群集外部访问,您有3个选项:

  1. [NodePort服务类型
  2. LoadBalancer服务类型(尽管您仍然必须手动管理LoadBalancer)
  3. 入口

还有第四个选项,它是hostPort(这是not服务类型),但是当您绝对确保您的广告连播始终是位于同一节点上(或最终用于调试)。

话虽如此,但这只给我们留下了Kubernetes提供的一种解决方案:Ingress


0
投票

[ClusterIP服务仅在集群内可用。

对于裸机集群,您可以使用以下任何一种方法在外部提供服务。建议从最不推荐的顺序到最不推荐的顺序:

  1. 使用metallb实现LoadBalancer服务类型支持-https://metallb.universe.tf/。您将需要一个IP地址池,以便Metallb分发。

  2. 使用NodePort服务。您可以从任何节点IP:node_port地址访问服务。默认情况下,NodePort服务会在节点端口范围内选择随机端口。您可以使用服务规范中的spec.ports.nodePort字段在节点端口范围内选择自定义端口。

    缺点:默认情况下,节点端口范围是30000-32767。因此,您不能像8080那样绑定到您想要的任何自定义端口。尽管您可以使用kube-api-server的--service-node-port-range标志更改节点端口范围,但不建议将其用于低端口范围。

  3. 使用hostPort绑定节点上的端口。

    缺点:您没有固定的IP地址,因为除非使用nodeAffinity,否则您不知道Pod被调度到哪个节点。如果希望从给定端口上的所有节点均可访问它,则可以将pod设置为守护程序集。

[如果要处理HTTP流量,另一种选择是安装IngressController,例如nginx或Traefik,并使用Ingress资源。作为安装的一部分,他们使用上述方法之一使其可在外部使用。

© www.soinside.com 2019 - 2024. All rights reserved.