08|K8s 极简实战(三):如何解决服务发现问题?
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了在 Kubernetes(K8s)环境下,微服务之间的调用实际上是 Pod 之间的调用,并解决了 Pod 之间的服务发现问题。通过引入 K8s 原生的服务发现机制:Service,实现了一组来自同一个 ReplicaSet 创建的 Pod 组合在一起,并提供 DNS 的访问能力。文章详细介绍了 Service 的工作原理和借助 Endpoints 实现服务发现的方式。通过稳定的 IP 地址能力,访问 Service IP 就相当于访问 Service 所关联的 Pod。此外,还介绍了 Service 域名的使用方式和 Service 的类型。总结来说,本文为读者提供了解决微服务间通信问题的实用方法,为在 K8s 中进行服务发现提供了深入浅出的指导。 在 K8s 环境下,服务之间的调用通过 Pod 之间的调用实现,解决了服务发现问题。通过引入 K8s 原生的服务发现机制:Service,实现了一组来自同一个 ReplicaSet 创建的 Pod 组合在一起,并提供 DNS 的访问能力。文章详细介绍了 Service 的工作原理和借助 Endpoints 实现服务发现的方式。通过稳定的 IP 地址能力,访问 Service IP 就相当于访问 Service 所关联的 Pod。此外,还介绍了 Service 域名的使用方式和 Service 的类型。这为读者提供了解决微服务间通信问题的实用方法,为在 K8s 中进行服务发现提供了深入浅出的指导。
《云原生架构与 GitOps 实战》,新⼈⾸单¥59
全部留言(7)
- 最新
- 精选
- 橙汁总会有不知道的东西,用了这么久k8s才知道ExternalName 这样搞数据库或其他服务就可以标准化了 牛逼牛逼
作者回复: 是的,外部服务调用也可以通过 Service 访问。
2022-12-26归属地:广东26 - includestdio.h通过定义一个无选择符的 headless service ,并自行创建 ep ,通过 ep 将集群外部的数据库与内部的 svc 相关联 apiVersion: v1 kind: Service metadata: name: db namespace: example spec: ports: - port: 3306 targetPort: 3306 --- apiVersion: v1 kind: Endpoints metadata: name: db namespace: example subsets: - addresses: - ip: 10.244.0.1 - ip: 10.244.0.2 - ip: 10.244.0.3 ports: - port: 3306 protocol: TCP
作者回复: 非常详细,还提到了 headless service 的知识点!
2022-12-27归属地:广东5 - 奕Service 和 Endpoints 是2种资源,创建之后是怎么进行关联的? 根据2个 声明文件里面的 metadata.name 是否一致?
作者回复: 是的。
2022-12-26归属地:广东5 - dvaapiVersion: v1 kind: Service metadata: name: mysql-svc namespace: example spec: ports: - port: 3306 targetPort: 3306 protocol: TCP name: tcp --- apiVersion: v1 kind: Endpoints metadata: name: mysql-svc namespace: example subsets: - addresses: - ip: 192.168.0.200 ports: - port: 3306 name: tcp # 在 K8S 中的容器使用 mysql-svc.example.svc.cluster.local:3306 就可以访问到 mysql 了。
作者回复: 正确。
2022-12-26归属地:广东1 - 潜龙勿用请问下dubbo的服务注册与发现如何兼容k8s
作者回复: 一般做法事在 k8s 上部署 dubbo,然后用它的服务发现,他们功能有重合,所以就不用 K8s 的服务发现了。
2023-09-19归属地:广东 - 李多我也是,之前没注意过ExternalName。这样一来在一些微服务的配置中,就可以进一步把服务和使用的中间件解耦(将一些中间件服务地址直接用集群访问地址表示),在实际部署的时候通过ExternalName方式让微服务访问其他中间件。
作者回复: 是的,很好的思路👍🏻
2023-01-08归属地:广东 - 烟火不坠不知道我理解对了没,应该是这个意思吧。 --- apiVersion: v1 kind: Service metadata: name: mysql spec: ports: - port: 3306 protocol: TCP targetPort: 3306 type: ClusterIP --- apiVersion: v1 kind: Endpoints metadata: name: mysql subsets: - addresses: - ip: 192.168.0.xxx ports: - port: 3306 protocol: TCP
作者回复: 正确!
2022-12-26归属地:广东