我在一个Kubernetes集群上本地工作(在Docker for Mac中),这个集群最终将部署到云上。我们计划在该环境中使用数据库服务。为了模拟这种情况,我想让集群中的服务连接到我的笔记本电脑上集群外运行的数据库。
我可以这样做吗?这是我想尝试的。
- 用
type: ExternalName
和externalName: 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)