在 kubernetes 中自定义名字解析,通过名称访问局域网主机上的服务
在很多情况下,我们希望 kubernetes 中的软件通过名称来访问已经安装在物理服务器上的传统服务,而不是 IP 地址。有几个方法:
-
修改 kubernetes 的 DNS 解析,使用局域网 DNS 服务器作为上游解析器
-
如果局域网没有 DNS 服务器,可以在 kubernetes 中注册物理服务器名称
第一种方法需要修改 kubernetes DNS 设置,有一定侵入性。实现可参考 https://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/
这里咱们讲第二种非侵入实现。
一、创建服务
Kubernetes 将服务名称注册到 DNS 中,为了注册 DNS 条目,我们首先需要创建一个服务。
---
apiVersion: v1
kind: Service
metadata:
namespace: cloudeon
name: rz-186-k8s
spec:
type: ClusterIP
clusterIP: None
这个服务有几个特点:
clusterIP
为None
类型为 ClusterIP,但是clusterIP
为None
的服务,即为 headless 服务。- 没有设置
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-k8s
到 192.168.2.186
的自定义解析。
参考资料
- Kubernetes 服务(Service)- https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/