This theme is bu|

ageovb

园龄:13年3个月粉丝:13关注:0

2022-09-12 21:06阅读: 5089评论: 0推荐: 0

K8s 集群内外访问服务的方式

集群内访问服务

服务发现是 K8s 中的一个重要机制,其基本功能为:在集群内通过服务名对服务进行访问,即需要完成从服务名到 ClusterIP(服务的虚拟 IP) 的解析。

K8s 主要有两种服务发现机制:环境变量和 DNS。没有 DNS 服务的时候,K8s 会采用环境变量的形式,但一旦有多个服务,环境变量会变复杂,为解决该问题,我们使用 DNS 服务。

所以集群内访问服务有以下三种方式:
集群内访问服务

集群外访问服务

集群外部即从外网访问服务,有以下五种(前两种很少使用)方式:

hostNetwork

在 Pod 中设置 hostNotwork:true 就可以让 Pod 直接使用 Node 的网络,使用 NodeIP:PodPort 访问 Pod。

但是 Pod 启动的时候可能被调度到不同的 Node 上,所有外部访问 Pod 的 IP 也是变化的,而且调度 Pod 的时候还需要考虑是否与宿主机上的端口冲突

而且,该模式下,每一个 Node 只能启动一个同 deployment 的 Pod。

hostPort

设置容器的 hostPort,hostPort 是直接将容器的端口映射为 Node 上的端口, 使用 NodeIP:NodePort 访问 Pod。

缺点是需要维护端口映射关系,不然 Pod 重新调度后就访问不到了。

NodePort

创建 NodePort 类型的 Service 时,用户可以指定范围为 30000-32767 的端口,对该端口的访问就能通过 kube-proxy 代理到 Service 后端的 Pod 中。使用 NodeIP:PodPort 访问 Pod。

这种服务暴露方式,无法让你指定自己想要的应用常用端口,不过可以在集群上再部署一个反向代理作为流量入口。
NodePort

LoadBalancer

LoadBalancer 针对于 Service,且只能在云服务平台上使用(AWS、Azure、阿里云等),使用任一节点的 IP 访问,如 LoadBalancerIP:LoadBalancerPort
LoadBalancer

Ingress

Ingress Controller 以 Docker 容器的方式部署在 K8s 的顶部,简单来说就是 K8s 所使用的负载均衡器,类型有:Nginx、Envoy、HAProxy 等。
一般使用 K8s 官方的 Ingress-Nginx Controller(注意,不是 Nginx 公司的 Nginx Ingress Controller) 作为外网访问服务的方式。
Ingress

参考资料

https://blog.csdn.net/u010275850/article/details/122644489
https://blog.csdn.net/GuXiaoyan12/article/details/104086114
https://blog.csdn.net/qq_21187515/article/details/101363521
https://www.infoq.cn/article/KNMAVdo3jXs3qPKqTZBw

本文作者:ageovb

本文链接:https://www.cnblogs.com/ageovb/p/16687299.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   ageovb  阅读(5089)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起