#azure #kubernetes #azure-aks
#azure #kubernetes #azure-aks
Вопрос:
Моя конфигурация:
apiVersion: v1
kind: ServiceAccount
metadata:
name: external-dns
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: external-dns
rules:
- apiGroups: [""]
resources: ["services"]
verbs: ["get","watch","list"]
- apiGroups: [""]
resources: ["pods"]
verbs: ["get","watch","list"]
- apiGroups: ["extensions"]
resources: ["ingresses"]
verbs: ["get","watch","list"]
- apiGroups: [""]
resources: ["nodes"]
verbs: ["list"]
- apiGroups: ["networking.istio.io"]
resources: ["gateways"]
verbs: ["get","watch","list"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
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: kube-system
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: external-dns
namespace: kube-system
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: external-dns
spec:
serviceAccountName: external-dns
containers:
- name: external-dns
image: registry.opensource.zalan.do/teapot/external-dns:latest
args:
- --source=ingress
- --source=istio-gateway
- --domain-filter=xxx
- --policy=upsert-only
- --provider=azure
volumeMounts:
- name: azure-config-file
mountPath: /etc/kubernetes
readOnly: true
volumes:
- name: azure-config-file
secret:
secretName: azuredns-config
Объекты шлюза Istio анализируются, и создаются записи DNS (это произошло некоторое время назад, сейчас я ничего не вижу в журнале). По какой-то причине входные записи не анализируются. Я пробовал добавлять --source=service
и аннотировать сервис с помощью: external-dns.alpha.kubernetes.io/hostname: my.host.name
, тоже безрезультатно.
Есть идеи? Это выглядит нормально, но почему-то не работает. Вход работает, cert-manager создает сертификат, если я вручную создаю запись DNS, вход работает нормально.
Ответ №1:
Я предлагаю запустить https://github.com/kubernetes-incubator/external-dns с соответствующей ролью поставщика облачных услуг, например, ролью IAM в AWS, которая позволяет изменять записи Route53.
Для Azure: https://github.com/kubernetes-incubator/external-dns/blob/master/docs/tutorials/azure.md
При запуске убедитесь, что у вас включен входной источник: https://github.com/helm/charts/blob/master/stable/external-dns/values.yaml#L8-L12
В нем есть ведение журнала отладки, поэтому вы можете точно проверить, что происходит с вашей записью.
Комментарии:
1. вы упомянули, что записи istio создаются при запуске кластера, возможно, они являются частью начальной загрузки и создаются другим механизмом (terraform?)
2. пример аргументов из моего развертывания:
--log-level=debug --policy=upsert-only --provider=aws --registry=txt --txt-owner-id=my.k8s.cluster --source=service --source=ingress
3. нет, они создаются внешним dns, они имеют внешнюю аннотацию dnd txt
4. тогда роль правильная. Попробуйте включить ведение журнала отладки, добавьте оба
--source
флага и посмотрите, попадает ли ваша запись хотя бы в поле зрения external-dns5. Для входа он не ищет аннотацию внешнего dns, он берет имя хоста из самого входа:
spec: rules: - host: <hostname-which-goes-to-dns>
Ответ №2:
проблема возникла из-за того, что nginx-ingress не опубликовал свой IP-адрес в поле состояния входных ресурсов. Проблема GH: https://github.com/kubernetes-incubator/external-dns/issues/456
--log-level=debug
помогло определить проблему. Исправлено путем добавления этого в развертывание контроллера входа nginx:
- --publish-service=kube-system/nginx-ingress-controller
- --update-status