5-4 kubernetes的服务发现
K8S 的访问情况大致有分为3种
1、集群内部
1.1 DNS+ ClusterIP
1.2 Headless(HeadlessService)
2、集群内--> 集群外
2.1 IP+Port
2.2 OutService
3、集群外--> 集群内
3.1 NodePort # 有多少相同的端口都同时访问
3.2 HostPort # 一对一绑定访问
3.3 Ingress(IngressController)
三个访问方式
1、集群内部互访,PodA -> PodB
2、集群内部访问集群外部 PodA->外部 MySQL
3、集群外部访问集群内部
分情况说明方案:
1、集群内部互访
- 方案1:每个 Pod 都会被分配一个 ClusterIP,Pod 之间可以通过 IP 直接访问,但 Pod 重启后,IP 会变化,并且无法对 PodB 多个服务同时访问
- 方案2:DNS+ClusterIP利用 K8S 的 DNS 和 Service,将 PodB 处理为 Service,例如叫做 SerB,此时 PodA 可直接访问 SerB 来实现访问,K8S 的 DNS 会将 SerB 解析到对应的 IP, 并实现负载均衡
- 方案3:HeadlessService, 返回Pod列表,PodA拿到Pod列表后,自己进行负载均衡和其他的处理
2、集群内部访问集群外部
- 2.1:直接访问外部服务的 IP 和端口
- 2.2:通过 Service, 定义一个 ServiceMySQL,然后定义一个相同的 Endpoint ServiceMysql, Endpoint 中定义的是外部服务的具体地址,K8S 的 DNS 此时会将 ServiceMysql 解析到 Endpoint地址,外部 MySQL 地址如果有变化,修改 Endpoint 地址即可,对于客户端来说,跟访问内部 Service 没有区别
3、集群外部服务访问集群内部的服务
- 3.1 NodePort: Service 的一种类型,除了 cluseterIP 之外,会在每个 Worker 节点上暴露一个端口,若节点上没有运行内部Pod服务,NodePort 会将请求终转发会运行Pod服务的Worker节点去,NodePort 方式不太推荐
- 3.2 HostPort: Service 的另一种类型,只会在运行了 Pod 的 Worker 上启动端口,客户端必须访问指定的Worker的端口,访问其他的Worker不行
- 3.3 Ingress: Service 的另一种类型,Ingress 需要配置一下内容:
- 域名
- 域名的请求的路径
- 这个请求转发到的 Service 名称
- 最后由 IngressController 完成域名和请求的转发
本文来自博客园,作者:王竹笙,转载请注明原文链接:https://www.cnblogs.com/edeny/p/14419599.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
2019-02-20 6-----Docker实例-安装Redis