#kubernetes #dns #yaml #coredns #yugabyte-db
Вопрос:
У моего кластера есть свое собственное доменное имя k8s.my-domain.com
.
Первоначально, когда я развертывал Dgraph, я столкнулся с проблемой, из-за которой их модули не могут общаться друг с другом dgraph-service.dgraph-namespace.svc.cluster.local
.
Если они разговаривают друг с другом по
dgraph-service.dgraph-namespace
dgraph-service.dgraph-namespace.svc.k8s.my-domain.com
это сработает.
Я исправил это, удалив .svc.cluster.local
часть из Dgraph yaml и создав запрос на вытягивание по адресу https://github.com/dgraph-io/dgraph/pull/7976.
Сегодня, когда я развертываю Yugabyte, я снова столкнулся с той же проблемой. Я создал билет на https://github.com/yugabyte/yugabyte-operator/issues/38 и, надеюсь, команда Yugabyte сможет это исправить.
Однако я не уверен, что сейчас такой подход хорош. Я надеюсь, что смогу что-то сделать со своей стороны.
Есть ли способ перенаправить с .svc.cluster.local
на .svc.k8s.my-domain.com
?
Может быть, в CoreDNS, чтобы мне не нужно было изменять исходный файл Dgraph или Yugabyte YAML? Спасибо!
ОБНОВЛЕНИЕ 1:
На основе предложения @CodeWizard и потому, что я получил предупреждение от своей среды разработки:
Поэтому я попробовал обе версии:
apiVersion: v1
kind: Service
metadata:
name: external-service
spec:
type: ExternalName
externalName: k8s.my-domain.com
и
apiVersion: v1
kind: Service
metadata:
name: external-service
spec:
type: ExternalName
externalName: cluster.local
После применения этого файла yaml.
Тем не менее, я все равно получил ту же ошибку при развертывании Yugabyte в моем кластере.
Ответ №1:
Вы можете использовать ExternalName
в своем сервисе.
kind: "Service"
apiVersion: "v1"
metadata:
name: "external-mysql-service"
spec:
type: ExternalName
externalName: example.domain.name
selector: {} # The selector field to leave blank.
Использование внешнего доменного имени
- Использование внешних доменных имен упрощает управление внешней службой, поскольку вам не нужно беспокоиться об изменении IP-адресов внешней службы.
- Вы можете использовать службу внешних имен для направления трафика во внешнюю службу.
- Использование службы внешних доменных имен сообщает системе, что DNS-имя в
externalName
поле (example.domain.name в предыдущем примере) — это местоположение ресурса, который поддерживает службу. - Когда DNS-запрос выполняется против DNS-сервера Kubernetes, он возвращает
externalName
запись CNAME, в которой клиенту предлагается найти возвращенное имя, чтобы получить IP-адрес.
Комментарии:
1. Привет @CodeWizard Я не уверен, что правильно понял. На самом деле у меня возникли проблемы с развертыванием, например, Yugabyte в моем кластере, когда у моего кластера есть доменное имя. Если у моего кластера нет доменного имени, не возникнет проблем с развертыванием Yugabyte. Собственные службы Yugabyte пытаются общаться друг с другом
yugabyte-service.yugabyte-namespace.svc.cluster.local
, но это не удалось, потому что у моего кластера есть доменное имяk8s.my-domain.com
. Если они поговорят друг с другом черезyugabyte-service.yugabyte-namespace
илиyugabyte-service.yugabyte-namespace.svc.k8s.my-domain.com
, это сработает.