如何向公共IP公开Kubernetes API?

如何向公共IP公开Kubernetes API?,kubernetes,rancher,Kubernetes,Rancher,我已经使用Rancher在我的VMware主机上成功地设置了Kubernetes群集。我运行了kubernetes仪表板,可以使用kubectl对集群执行命令 现在,我想使用SaaS构建工具(Distelli)将我的应用程序部署到集群。此生成工具应使用HTTPS客户端证书、客户端密钥和群集证书连接到我的主机 然而,我的KubernetesAPI还没有公开 这是我当前的kubernetes服务配置: $kubectl describe services kubernetes Name:

我已经使用Rancher在我的VMware主机上成功地设置了Kubernetes群集。我运行了kubernetes仪表板,可以使用kubectl对集群执行命令

现在,我想使用SaaS构建工具(Distelli)将我的应用程序部署到集群。此生成工具应使用HTTPS客户端证书、客户端密钥和群集证书连接到我的主机

然而,我的KubernetesAPI还没有公开

这是我当前的kubernetes服务配置:

$kubectl describe services kubernetes
Name:           kubernetes
Namespace:      default
Labels:         component=apiserver
            provider=kubernetes
Selector:       <none>
Type:           ClusterIP
IP:         10.43.0.1
Port:           https   443/TCP
Endpoints:      10.42.173.175:6443
Session Affinity:   ClientIP
$kubectl描述kubernetes的服务
姓名:kubernetes
名称空间:默认值
标签:组件=apiserver
提供者=kubernetes
选择器:
类型:集群
IP:10.43.0.1
端口:https 443/TCP
终点:10.42.173.175:6443
会话关联:ClientIP
如何使此服务在外部IP地址上可用?我尝试使用入口负载平衡器连接到服务器,但它只返回一个503服务不可用


有什么想法吗?

您需要有一条从公共互联网到API服务器的路由。这可以通过向运行api服务器的机器分配一个公共IP direct来实现,也可以使用负载平衡器direct traffic。您提到您在VMWare上,因此根据您的网络设置,可能有两条不同的路径

我还没有完全掌握这方面的诀窍,因为我有一些与我自己的实现相关的问题(例如,如何扩展它?)。但我就是这样做的

首先,您显然有一个域,即“mywonderfulwebsite.com”,在该域上您有可以编辑的DNS区域,为mywonderfulwebsite.com添加一个“a”记录,并指向群集的ip地址

现在,哪个IP地址是有趣的,因为Kubernetes强制要求您运行多个节点,至少一个主节点和一个应用服务器。因此,在此场景中,要使用的ip地址是应用程序服务器的ip地址。顺便说一句,这就是为什么我不知道如何扩展它,因为如果我有1个主节点+10个应用节点,我现在应该使用哪个ip地址?都是吗

在应用程序节点上,部署ingress nginx controller,因为这是您的裸机负载平衡器。裸机是谷歌搜索时经常听到的一个术语,它基本上是你有一个空的服务器,你手动安装了Kubernetes,它不像AWS、Azure或其他

一旦安装了入口控制器,就可以开始创建使用它的入口资源。这就是我最初感到困惑的地方,但现在一切都清楚了。创建入口只是应用程序要部署的资源,但它需要负载平衡器或入口控制器将外部世界的请求传递到集群中

一旦您创建了另一个入口,来自该域的任何请求都将从dns服务器传递到您的应用程序节点,它将传递到入口nginx控制器,该控制器将尝试将其与任何现有入口资源进行匹配,当它找到一个入口资源时,它将配置您为应用程序和bingo创建的服务资源的后端!您的应用程序将收到请求

我有一个github可以帮助您: