首页 文章

如何将Kubernetes API公开给公共IP?

提问于
浏览
1

我已经使用Rancher在我的VMware主机上成功 Build 了Kubernetes集群 . 我运行了kubernetes-dashboard,可以使用kubectl对集群执行命令 .

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

但是,我的kubernetes API尚未公开 .

这是我目前的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

如何在外部IP地址上提供此服务?我曾尝试使用入口负载均衡器到服务器,但它只返回503服务不可用 .

有任何想法吗?

2 回答

  • 0

    您需要拥有从公共互联网到API服务器的路由 . 这可以通过将公共IP直接分配给运行api服务器的计算机来完成,或者也可以让负载均衡器直接进入流量 . 您提到您使用的是VMWare,因此根据您的网络设置,可能会有几个不同的路径 .

  • 1

    我还没有完全了解这一点,因为我有一些与我自己实现这个问题有关的问题(例如,我如何扩展它?) . 但这就是我做到的 .

    首先,您显然有一个域名,即“mywonderfulwebsite.com”,并且您可以在那里编辑DNS区域,为mywonderfulwebsite.com添加“A”记录并指向群集的IP地址 .

    现在,哪个IP地址很有趣,因为Kubernetes强制要求您运行多个节点,至少一个主节点和一个应用服务器 . 因此,在这种情况下,要使用的IP地址是应用服务器的IP地址 . 这顺便说一下,为什么我不确定如何扩展这个,因为如果我有1个主10个应用程序节点,我现在使用哪个IP地址?他们都是?

    在app节点上,部署ingress-nginx-controller,因为这是你的裸机负载均衡器 . 裸金属是谷歌搜索时会听到的一个术语,它基本上是你手动安装Kubernetes的空服务器,它不像AWS,Azure或其他 .

    安装入口控制器后,您可以开始创建使用它的入口资源 . 所以这就是我最初的困惑,但现在一切都很清楚了 . 创建入口只是部署应用程序的资源,但它需要LoadBalancer或Ingress Controller才能将来自外部世界的请求传递到您的集群 .

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

    我有一个可能对你有帮助的github:http://github.com/christhomas/kubernetes-cluster

相关问题