在 kubernetes 中自定义名字解析,通过名称访问局域网主机上的服务

发布时间 2024-01-07 19:51:09作者: 代码为生

在很多情况下,我们希望 kubernetes 中的软件通过名称来访问已经安装在物理服务器上的传统服务,而不是 IP 地址。有几个方法:

  1. 修改 kubernetes 的 DNS 解析,使用局域网 DNS 服务器作为上游解析器

  2. 如果局域网没有 DNS 服务器,可以在 kubernetes 中注册物理服务器名称

这里讲第二种实现。

一、创建服务

Kubernetes 将服务名称注册到 DNS 中,为了注册 DNS 条目,我们首先需要创建一个服务。

---
apiVersion: v1
kind: Service
metadata:
  namespace: cloudeon
  name: rz-186-k8s
spec:
  type: ClusterIP
  clusterIP: None

这个服务有几个特点:

  1. clusterIPNone
    类型为 ClusterIP,但是 clusterIPNone 的服务,即为 headless 服务。
  2. 没有设置 selector
    没有 selector 意味着不会自动创建端点,以便自定义端点 IP 地址。

二、创建端点

端点通过 kubernetes.io/service-name 与服务绑定。

---
apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
  namespace: cloudeon
  name: rz-186-k8s
  labels:
    kubernetes.io/service-name: rz-186-k8s
addressType: IPv4
endpoints:
- addresses:
  - "192.168.2.186"

这样我们就在 Kubernetes 中实现了从 rz-186-k8s192.168.2.186 的自定义解析。

参考资料

  1. Kubernetes 服务(Service)- https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/