自行搭建 k8s ,怎么通过域名访问服务

lingerr · 2024-7-26 15:42:43 · 280 次点击
### 问题描述

1. 楼主最近在公网搭建了 Kubernetes (K8s) 集群,集群由三台具有公网 IP 的机器组成。目前使用 NodePort 方式访问服务,由于预算有限,没有使用公网负载均衡。
2. 服务架构为前后端分离,前端通过 Nginx 启动,NodePort 端口为 30080 。访问方式为直接通过 IP:Port 进行访问。
3. 现在是已有域名比如[test.com]( https://test.com/)解析到机器 A ,并在机器 A 上通过 80 端口反向代理到机器 A 、B 、C ,以实现通过域名访问服务。
4. 有使用过 Ingress Controller, 但是还是使用的 nodeport 方式, 感觉多此一举

### 问题

请问是否有其他更好的方法来实现通过域名访问 K8s 集群中的服务?公司里面一般是怎么做的呢, 新手不太明白
举报· 280 次点击
登录 注册 站外分享
20 条回复  
lzh690554304 小成 2024-7-26 15:57:46
ingress controller 是第一步
THESDZ 小成 2024-7-26 16:01:16
ingress controller  caddy/traefik
wandehul 小成 2024-7-26 16:04:10
企业服务还在乎 alb 那点钱 ?   流量费算是最便宜的部份了。   搞什么 nodeport ?人工运维的成本都要比 alb + 流量贵很多。
mightybruce 小成 2024-7-26 16:09:28
自己测试想怎么玩怎么玩,
我只说一下在正式环境中不使用 nodeport,生产环境中是不许 NodePort ,NodePort 会在所有节点( VM )上打开一个特定的端口,并且发送到该端口的所有流量都将转发到该服务。

此方法有很多缺点:
每个端口只能提供一次服务
您只能使用端口 30000–32767
如果您的节点/ VM IP 地址更改,则需要处理

正常情况都是通过各种 ingress controller 比如 nginx ingress 来访问的
生产环境建议使用 Loadbalancer 和 Ingress ,四层( TCP/UDP )代理使用 Loadbalancer ,七层( HTTP/HTTPS )代理使用 Ingress 。
另外也不是直接访问 ip 和端口,而是通过 ingress 去访问 service(clusterIP), service 再访问 pod
sujin190 小成 2024-7-26 16:11:20
看来你对 Ingress 有误解啊,Ingress Controller 调整配置绑定到 host network 就可以绑定到宿主机的 80 和 443 端口了啊,然后直接域名解析到部署 Ingress Controller 的那个节点就好了啊,否则 Ingress Controller 还是通过 nodeport 导出的,不能绑定到 80 和 443 端口,域名解析自然也还是需要输入端口
JayZXu 小成 2024-7-26 16:30:45
ingress 默认启动就是 80 和 443 ,接管了本地反代,后面的东西直接在 k8s 里面改配置就行了
sudosu 小成 2024-7-26 16:51:35
rancher
Daath 小成 2024-7-26 18:04:57
* 抛开外网怎么访问 k8s 里面的具体什么应用服务,在 k8s 的运行机制里面,pod 对外服务交由 svc 来暴露,所以在 pod 之间访问也一般都经过 svc
* 当你使用 ingress controller 这类资源时,它也首先是作为应用服务 pod ,譬如 nginx-ingress-controller ,然后接收 k8s 的 ingress 配置来让 controller 这个 pod 服务知道怎么访问别的 namespace 下的 svc ,至此,从 controller 的 pod 到其他应用 pod 的链路就通了
* 那么外网怎么访问服务,只需要考虑如何让外网访问到 ingress-controller ,那么是由 ingress-controller-svc 来描述,至于是采用 nodeport 或者 lb 类型,都是告知集群上节点机器宿主端口做映射到集群上 ingress-controller 的 svc 端口,从而实现外部访问
guoguobaba 小成 2024-7-26 18:11:18
假设你的 k8s 的 ip 是 ip1 ,你设置了一个 host1 对应到 ip1 ,无论是公共的 dns 解析还是你机器上的/etc/hosts 解析。
然后在 ingress 里绑定一个 host1 对应到相关 cluster ip 就可以了。
当然,你也可以开一个 node port 的 service ,然后用 host1:<node port>访问也可以。
ingress 里绑定证书,你就可以用 https 访问

如果你是多节点,也可以弄一个 SLB ,把 host1 绑定在 SLB 的 ip 上,这样 SLB 会自动负载均衡到所有 INGRESS 对应的 ip 上。
123下一页
返回顶部