创建通过多个IP地址引用外部服务的Kubernetes服务

时间:2019-08-23 00:59:45

标签: kubernetes dns

Kubernetes中是否有一种方法可以为应该返回多个IP地址的外部服务创建服务?目前,我正在通过在公共DNS提供商(route53)中创建A记录,然后在Kubernetes中创建服务来解决此问题:

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
  labels:
    app: rabbitmq
spec:
  type: ExternalName
  externalName: rabbitmq.mydomainhere.dev

是否有一种方法可以在Kubernetes中本地创建服务,该服务返回一组固定的IP地址,这些IP地址不在Kubernetes集群内部进行管理,而无需创建公共DNS记录并使用externalName

2 个答案:

答案 0 :(得分:2)

您可以创建没有选择器的无头服务,并将clusterIP设置为None,然后手动创建端点以在端点中设置所有IP。您可以看以下示例。

kind: Service
apiVersion: v1
metadata:
  name: my-es
spec:
  clusterIP: None

---
kind: Endpoints
apiVersion: v1
metadata:
  name: my-es
subsets:
  - addresses:
      - ip: 172.22.111.250
      - ip: 172.22.149.230
    ports:
      - port: 9200

一个Pod的nslookup输出

root@curl-66bdcf564-8m6h7:/ ]$ nslookup my-es
Server:    169.254.25.10
Address 1: 169.254.25.10

Name:      my-es
Address 1: 172.22.111.250 172-22-111-250.my-es.default.svc.cluster.local
Address 2: 172.22.149.230 172-22-149-230.my-es.default.svc.cluster.local

答案 1 :(得分:0)

ExternalIP服务使用从预定义的外部IP地址池中路由到群集节点的IP地址。这些外部IP地址不受Kubernetes管理;它们是集群管理员的责任。

您可以创建没有选择器的无头服务,并将clusterIP设置为None,然后手动创建端点以在端点中设置所有IP。您可以看以下示例。

kind: Service
apiVersion: v1
metadata:
  name: my-es
spec:
  clusterIP: None

---
kind: Endpoints
apiVersion: v1
metadata:
  name: my-es
subsets:
  - addresses:
      - ip: 172.22.111.250
      - ip: 172.22.149.230
    ports:
      - port: 9200

一个Pod的nslookup输出

root@curl-66bdcf564-8m6h7:/ ]$ nslookup my-es
Server:    169.254.25.10
Address 1: 169.254.25.10

Name:      my-es
Address 1: 172.22.111.250 172-22-111-250.my-es.default.svc.cluster.local
Address 2: 172.22.149.230 172-22-149-230.my-es.default.svc.cluster.local

文档:service-selectors。 有用的文章:exposing-pods