在Kubernetes上,我可以创建一个Service
,然后创建一个Endpoint
,它指向一组外部IP地址,因此我可以在群集中使用该service
。例如:
kind: Service
apiVersion: v1
metadata:
name: elasticsearch
spec:
type: ClusterIP
ports:
- port: 9200
targetPort: 9200
---
kind: Endpoints
apiVersion: v1
metadata:
name: elasticsearch
subsets:
- addresses:
- ip: 10.128.1.2
- ip: 10.128.1.3
- ip: 10.128.1.4
- ip: 10.128.1.5
ports:
- port: 9200
这很好,但是要保持更新很痛苦。
我以为也许可以用Service
创建一个ExternalName
,但是我不确定是轮循还是仅缓存DNS
结果并直接使用:>
kind: Service
apiVersion: v1
metadata:
name: elasticsearch-dns
spec:
type: ExternalName
externalName: elasticsearch.foo.bar
是否可以通过外部DNS在Kubernetes上创建服务,从而将请求循环到DNS的多个IP地址?
答案 0 :(得分:1)
当任何应用程序查找名称elasticsearch-dns
时,群集DNS会返回值为elasticsearch.foo.bar
的CNAME记录。因此,kubernetes不会缓存IP或任何内容。
apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: prod
spec:
type: ExternalName
externalName: my.database.example.com
在查找主机my-service.prod.svc.cluster.local时, 群集DNS服务返回带有值的CNAME记录 my.database.example.com。访问我的服务的工作方式与 其他服务,但区别在于重定向 发生在DNS级别,而不是通过代理或转发。