"ExternalName"服务可以指向主机吗?



我在一个Kubernetes集群上本地工作(在Docker for Mac中),这个集群最终将部署到云上。我们计划在该环境中使用数据库服务。为了模拟这种情况,我想让集群中的服务连接到我的笔记本电脑上集群外运行的数据库。

我可以这样做吗?这是我想尝试的。

  • type: ExternalNameexternalName: somedb.local定义Service
  • 127.0.0.1 somedb.local添加到笔记本电脑的/etc/hosts

正确吗?有没有更好的办法?

和同事商量后,我找到了一个解决办法。

在Docker for Mac中,host.docker.internal指向主机,这让我可以连接到运行在主机上的db,即使是从K8s集群中运行的容器。

通过创建具有匹配名称的端点对象,您可能有一个指向SDN外地址的服务。

----
apiVersion: v1
kind: Service
metadata:
name: external-db
namespace: my-namespace
spec:
ports:
- name: exporter-3306
port: 3306
selector:
name: external-db
---
apiVersion: v1
kind: Endpoints
metadata:
name: external-db
namespace: my-namespace
subsets:
- addresses:
- ip: 10.42.253.110
ports:
- name: exporter-3306
port: 3306

您可以在部署定义中添加主机覆盖:

apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
containers:
...
hostAliases:
- ip: 10.42.253.110
hostnames:
- external-db

似乎Kubernetes文档提供了如何实现这一点的说明。https://kubernetes.io/docs/concepts/services-networking/service/services-without-selectors

注意:端点ip不能是:loopback (IPv4为127.0.0.0/8,IPv6为::1/128)或link-local (IPv4为169.254.0.0/16和224.0.0.0/24,IPv6为fe80::/64)

相关内容

  • 没有找到相关文章

最新更新