Kubernetes ExternalDNS не создает набор записей в зоне Azure DNS.
Я последовал этому, чтобы развернуть K8s ExternalDNS, и сделал следующее:
- создан домен службы приложений Azure и зона DNS (т. е.
demo.com
) - включена управляемая идентификация для кластера AKS
- назначена роль участника для управляемого идентификатора AKS для зоны DNS
- создал секрет K8s для ExternalDNS (используя
azure.json
) - развернут ExternalDNS в пространстве имен по умолчанию K8s (AKS)
- создал 2 входа с
host: api.demo.com
и пути/foo
&/bar
(К вашему сведению, AKS AGIC включен, а шлюз приложений использует статический общедоступный IP-адрес)
Если я правильно понимаю, ExternalDNS должен создать набор записей в зоне Azure DNS, и входящие данные должны работать. Но ExternalDNS не создает набор записей (входящие данные не работают).
К вашему сведению, если я сделаю следующее, то все будет работать нормально
- создать набор записей псевдонима с
"Alias type: Azure resource"
который указывает на «Статический общедоступный IP-адрес», используемый шлюзом приложений. - контроллеры, помеченные
[Route("api/foo")]
&[Route("api/bar")]
соответственно - создать 2 входа с
host: demo.com
и путиapi/foo/*
&api/bar/*
- использовать аннотацию для каждого входа:
appgw.ingress.kubernetes.io/backend-path-prefix: "/foo/"
(то же самое для Bar API:"/bar/"
)
Но я хочу разместить свои API с
api.demo.com
(также SSL с Let's Encrypt)
foo-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: foo-api
namespace: default
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/ssl-redirect: "false"
appgw.ingress.kubernetes.io/backend-path-prefix: "/foo/"
spec:
rules:
- host: api.demo.com
http:
paths:
- path: /foo/*
pathType: Prefix
backend:
service:
name: foo-api
port:
number: 80
external-dns.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: external-dns
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: external-dns
rules:
- apiGroups: [""]
resources: ["services","endpoints","pods"]
verbs: ["get","watch","list"]
- apiGroups: ["extensions","networking.k8s.io"]
resources: ["ingresses"]
verbs: ["get","watch","list"]
- apiGroups: [""]
resources: ["nodes"]
verbs: ["list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: external-dns-viewer
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: external-dns
subjects:
- kind: ServiceAccount
name: external-dns
namespace: default
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: external-dns
spec:
strategy:
type: Recreate
selector:
matchLabels:
app: external-dns
template:
metadata:
labels:
app: external-dns
spec:
serviceAccountName: external-dns
containers:
- name: external-dns
image: k8s.gcr.io/external-dns/external-dns:v0.8.0
args:
- --source=service
- --source=ingress
- --domain-filter=demo.com
- --provider=azure
- --azure-resource-group=my-poc-rg
volumeMounts:
- name: azure-config-file
mountPath: /etc/kubernetes
readOnly: true
volumes:
- name: azure-config-file
secret:
secretName: azure-config-file