这里的前提是集群已安装Ingress,我这安装的是Ingress Nginx。
官方安装教程:https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/coredns.md
我们知道Ingress可以对集群中的服务进行DNS解析,意即我们可以通过类似http://nginx.demo.com/api 的方式访问集群中的服务,当然前提是,要在/etc/hosts中添加如下内容:
192.168.106.130 nginx.demo.com
external-dns 就是为了进一步简化这个问题,external-dns每隔一段时间会去查询Ingress,获得Ingress中的数据,然后push到其provider中,这里演示的是coredns。
必须说明一下,这里使用coredns演示,而coredns只能用于集群内部使用。external-dns+coredns的安装方法可参考官方的安装教程。官方教程说的不是很清楚的地方在etcd的使用。这里根据对etcd的使用有两种安装方式:
- 为external-dns新建一个etcd数据库
先看external-dns-etcd.yaml的内容:
apiVersion: v1
kind: Service
metadata:
labels:
k8s-app: coredns-etcd
name: coredns-etcd
namespace: default
spec:
ports:
- name: etcd-http
port: 2379
- name: etcd-peer
port: 2380
selector:
k8s-app: coredns-etcd
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-app: coredns-etcd
name: coredns-etcd
namespace: default
spec:
replicas: 1
selector:
matchLabels:
k8s-app: coredns-etcd
template:
metadata:
labels:
k8s-app: coredns-etcd
spec:
priorityClassName: system-cluster-critical
tolerations:
- key: CriticalAddonsOnly
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/master
containers:
- name: coredns-etcd
image: k8s.gcr.io/etcd:3.5.1-0
command: ["/usr/local/bin/etcd"]
args:
- --listen-client-urls=http://0.0.0.0:2379
- --advertise-client-urls=http://0.0.0.0:2379
- --data-dir=/var/lib/etcd
livenessProbe:
failureThreshold: 5
tcpSocket:
port: 2379
initialDelaySeconds: 60
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
ports:
- name: etcd-http
containerPort: 2379
protocol: TCP
- name