gcloud dns 记录集事务无法更新 IP 地址
gcloud dns record-sets transaction Cannot update IP address
尝试为我的域更新托管区域资源记录类型 A 的外部 IP 时使用命令行 Google Cloud DNS 时出现错误... this works fine using the browser based gce console ... 英文当我使用 Kubernetes 部署我的应用程序时,它给了我一个新的 IP,我需要 link 到我现有的域 DNS,这样人们就可以访问我的应用程序,将他们的浏览器指向我的域 (example.com) ... 擦每次我重新部署我的应用程序时是否需要执行此操作,因此需要自动化
注意 - Cloud DNS 区域已经存在并且可以使用。我正在尝试根据
更新外部 IP 地址以匹配新的 Kubernetes 部署的 LoadBalancer Ingress
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.
这里只是A类记录
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
我需要用新值 104.196.108.178 替换 IP 104.196.108.147 ...所以我发布
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,因为它不可扩展...... ......如果 kubernetes 在其所有云主机供应商之间实现通用解决方案,那将是一个很好的接触......人们是否使用其他一些自动化方式为了达成这个 ? lang x 中的一些 SDK 库?
Cloud DNS 操作适用于整个 RRsets(record-set
或 dns#resourceRecordSet
),而不是单个 RR。即使在后一种情况下,您的示例也不会执行您想要的操作,因为您最终会得到一个包含旧 IP 地址和新 IP 地址的 RRset,这只会 "work mostly."
无论如何,它是记录组并且每个RTYPE只允许一个RRset,所以你的事务需要删除现有 A
先设置 RR,然后添加新的。
尝试为我的域更新托管区域资源记录类型 A 的外部 IP 时使用命令行 Google Cloud DNS 时出现错误... this works fine using the browser based gce console ... 英文当我使用 Kubernetes 部署我的应用程序时,它给了我一个新的 IP,我需要 link 到我现有的域 DNS,这样人们就可以访问我的应用程序,将他们的浏览器指向我的域 (example.com) ... 擦每次我重新部署我的应用程序时是否需要执行此操作,因此需要自动化
注意 - Cloud DNS 区域已经存在并且可以使用。我正在尝试根据
更新外部 IP 地址以匹配新的 Kubernetes 部署的 LoadBalancer Ingresskubectl 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.
这里只是A类记录
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
我需要用新值 104.196.108.178 替换 IP 104.196.108.147 ...所以我发布
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,因为它不可扩展......
Cloud DNS 操作适用于整个 RRsets(record-set
或 dns#resourceRecordSet
),而不是单个 RR。即使在后一种情况下,您的示例也不会执行您想要的操作,因为您最终会得到一个包含旧 IP 地址和新 IP 地址的 RRset,这只会 "work mostly."
无论如何,它是记录组并且每个RTYPE只允许一个RRset,所以你的事务需要删除现有 A
先设置 RR,然后添加新的。