Транзакция наборов записей gcloud dns Не удается обновить IP-адрес

Получение ошибки при использовании командной строки Google Cloud DNS при попытке обновить внешний IP-адрес записи ресурса размещенной зоны типа A для моего домена... это отлично работает с использованием консоли gce на основе браузера ... на английском языке, когда я развертываю свое приложение с помощью Kubernetes, оно дает мне новый IP-адрес Мне нужно связать с моим существующим доменным DNS, чтобы люди могли получить доступ к моему приложению, указывая свой браузер на мой домен (example.com) ... загвоздка в том, что это действие должно происходить каждый раз, когда я повторно развертываю свое приложение, поэтому необходимо автоматизировать

Примечание. Зона Cloud DNS уже существует и работает. Я пытаюсь обновить внешний IP-адрес, чтобы он соответствовал входу LoadBalancer нового развертывания Kubernetes в соответствии с

kubectl describe svc --namespace=ruptureofthemundaneplane | grep Ingress
LoadBalancer Ingress:   104.196.108.178

вот текущее состояние

gcloud dns record-sets list --zone  zone-cubalibre --project ruptureofthemundaneplane 
NAME                           TYPE   TTL  DATA
example.com.            A      60   104.196.108.147
example.com.            NS     60   ns-cloud-a1.googledomains.com.,ns-cloud-a2.googledomains.com.,ns-cloud-a3.googledomains.com.,ns-cloud-a4.googledomains.com.
example.com.            SOA    60   ns-cloud-a1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 1209600 300
admin.example.com.      CNAME  60   example.com.
www.admin.example.com.  CNAME  60   example.com.
www.example.com.        CNAME  60   example.com.

вот просто запись типа А

gcloud dns record-sets list    --project ruptureofthemundaneplane   --zone zone-cubalibre   --name "example.com." --type "A"
NAME                 TYPE  TTL  DATA
example.com.  A     60   104.196.108.147

Мне нужно заменить IP 104.196.108.147 на новое значение 104.196.108.178 ... поэтому я выдаю

gcloud dns record-sets transaction start --zone zone-cubalibre  --project ruptureofthemundaneplane 

здесь я добавляю транзакцию с моим новым IP-адресом

gcloud dns record-sets transaction add  "104.196.108.178"  --name "example.com." --ttl 60 --type "A"  --project ruptureofthemundaneplane   --zone zone-cubalibre 

вот сгенерированный системой файл yaml

cat transaction.yaml 
---
additions:
- kind: dns#resourceRecordSet
  name: example.com.
  rrdatas:
  - ns-cloud-a1.googledomains.com. cloud-dns-hostmaster.google.com. 2 21600 3600 1209600
    300
  ttl: 60
  type: SOA
- kind: dns#resourceRecordSet
  name: example.com.
  rrdatas:
  - 104.196.108.178
  ttl: 60
  type: A
deletions:
- kind: dns#resourceRecordSet
  name: example.com.
  rrdatas:
  - ns-cloud-a1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 1209600
    300
  ttl: 60
  type: SOA

для полноты здесь прошу систему показать кеш транзакций

gcloud dns record-sets transaction  describe     --project ruptureofthemundaneplane   --zone zone-cubalibre  

... выход

additions:
- kind: dns#resourceRecordSet
  name: example.com.
  rrdatas:
  - ns-cloud-a1.googledomains.com. cloud-dns-hostmaster.google.com. 2 21600 3600 1209600
    300
  ttl: 60
  type: SOA
- kind: dns#resourceRecordSet
  name: example.com.
  rrdatas:
  - 104.196.108.178
  ttl: 60
  type: A
deletions:
- kind: dns#resourceRecordSet
  name: example.com.
  rrdatas:
  - ns-cloud-a1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 1209600
    300
  ttl: 60
  type: SOA

наконец, я совершаю транзакцию с этим

gcloud dns record-sets transaction execute    --project ruptureofthemundaneplane    --zone zone-cubalibre 
ERROR: (gcloud.dns.record-sets.transaction.execute) 
The resource 'entity.change.additions[1]' named 'example.com. (A)' already exists (code: 409)

какие-либо предложения ? Я хочу избежать предварительного определения статического IP-адреса, поскольку он не масштабируется... route53?noredirect=1#comment63970852_38275179">эквивалентные команды Amazon aws работают при развертывании с использованием kube-up.sh поверх aws... было бы неплохо, если бы kubernetes достиг общего решения для всех своих поставщиков облачных хостов ... Используют ли для этого другие автоматизированные средства? некоторая библиотека SDK в lang x?


person Scott Stensland    schedule 13.07.2016    source источник


Ответы (1)


Операции Cloud DNS работают со всеминаборами RR (record-set или dns#resourceRecordSet), а не с отдельными RR. Ваш пример не будет делать то, что вы хотите, даже в последнем случае, поскольку вы получите набор RRset, содержащий как старый, так и новый IP-адреса, которые будут работать только «в основном».

В любом случае, это наборы записей, и разрешен только один RRset для каждого RTYPE, поэтому ваша транзакция должна сначала удалить существующий A RRset, а затем добавить новый.

person Alex Dupuy    schedule 15.07.2016