GIP가 없는 Kubernetes 클러스터의 external-dns 대응
프로비저닝
이번에는 해당 장소의 구성도만 간략화했다.
문제점
상기 환경에서 external-dnsKubernetes 그룹에 간단하게 가져와도 다음과 같은 이유보다 더 잘 일할 수 없다.
spec.rules[].host
을 example.com
의 값(예를 들어 status.loadBalancer.ingress[].ip
으로 해석하는 데 사용되는 기록을 지정한 값대상 DNS 공급자으로 설정합니다.해결책
상기 문제를 해결하기 위해 external-Dns의providerCoreDNS에서 다음과 같은 구성을 채택하였다.
CoreDNS etcd Plugin
CoreDNS의 etcd Plugin 설명서는 다음과 같습니다.
192.168.0.51
키에 등록/${base_key}/com/example/xxx/${random}
된value를 통해CoreDNS에서 A기록{"host":"1.1.1.1"}
으로 명칭을 xxx.example.com
으로 해석할 수 있음external-dns CoreDNS Provider
external-dns의 etcd Provider는 다음과 같은 이용 예가 있다.
external-dns의Provider에서CoreDNS를 지정할 때external-dns는CoreDNS의 참조 대상인etcd를 기록하는 등록, 삭제 등의 동작을 합니다.
etcd-injector
상기 구성을 얻기 위해 실시된 etcd-injector의 원본 코드는 다음과 같다.
Kubernetes의 CronJob에서 실행하여 external-dns
1.1.1.1
에 정기적으로 삽입된 다음 기록의 해결 주소를 Global Addr/int/com/example
로 대체하고 아래로 복사합니다.이로써 각각 조작/ext/com/example
,coredns-internal
과CoreDNS를 통해 다음과 같은 내용을 실현할 수 있다.coredns-external
etcd의 coredns-internal
를 참고하여 /int/com/example
내부 주소의 이름으로 해석xxx.example.com
etcd의 coredns-internal
를 참고하여 /int/com/example
외부 주소의 이름으로 해석설정
나는 모든 문장을 일부분씩 고쳐 쓸 것이니 참고가 되기를 바란다.
xxx.example.com
for Corefile
. {
errors
health {
lameduck 5s
}
ready
prometheus :9153
cache 30
loop
reload
loadbalance
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
etcd $DOMAIN {
path /skydns
endpoint $ETCD_ENDPOINT
}
forward . 8.8.8.8 8.8.4.4
}
coredns-internal
for Corefile
$DOMAIN {
errors
health {
lameduck 5s
}
ready
prometheus :9153
cache 30
reload
loadbalance
etcd $DOMAIN {
path /external
endpoint $ETCD_ENDPOINT
}
}
coredns-external
cammand options external-dns --source=ingress --provider=coredns --log-level=debug
external-dns
command options etcd-injector \
--src-endpoints=$ETCD_ENDPOINT \
--dst-endpoints=$ETCD_ENDPOINT \
--src-directory=/skydns/com/example \
--ignore=/skydns/com/example/local \
--dst-directory=/external/com/example \
--rules-filepath=rules.yaml \
--delete
etcd-injector
for rules.yml
- jsonpath: ".host"
repl: "${GLOBAL_ADDR}"
- jsonpath: ".ttl"
repl: 900
고찰하다.
상술한 구성은 다음과 같은 장점이 있다.
etcd-injector
,A
,AAAA
,SRV
만 등록할 수 있는 제한[2]이 있어 다음과 같은 단점이 있다.총결산
위 방법을 사용하면 자신의 환경의 Kubbernetes에서 external-dns를 가져올 수 있습니다.이렇게 되면 Ingress 자원에 공개된 서비스 기록을 수동으로 등록하는 번거로움을 줄이고 관리도 훨씬 수월해진다.
또 단점으로 열거한 자역에서 위탁할 수 없는 일은 자신의 집 환경에서도 문제가 되지 않는다.
각주
서비스 자원도 external-dns의 관리 대상이 될 수 있으나 메인 라인에서 벗어났기 때문에 생략↩︎
https://coredns.io/plugins/etcd/에 상기 기록 이외의 등록 방법은 기술되지 않았다.또한 3년 전 아이슈. 디스플레이 관리자는 etcdbackend가 모든 자원 유형을 지원하지 않는다고 명확하게 밝혔다.↩︎
Reference
이 문제에 관하여(GIP가 없는 Kubernetes 클러스터의 external-dns 대응), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kanatakita/articles/630baf6461f9e091d43b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)