如何将 kubernetes LoadBalancer Ingress URL 发布到 aws route53
How to publish kubernetes LoadBalancer Ingress URL to aws route53
今天,当我在 aws 上使用 kubernetes 启动一个应用程序时,它公开了一个 public 可见的 LoadBalancer Ingress URL,但是 link 我的域可以访问该应用程序public,我需要在每次启动时在浏览器中手动进入 aws route53 控制台。我可以从命令行更新 aws route53 资源类型 A 以匹配最新的 Kubernetes LoadBalancer Ingress URL 吗?
Kubernetes over gcloud 面临这样的挑战,即必须预定义用于启动配置的静态 IP 或手动执行基于浏览器的域 linkage post 启动。在 aws 上,我希望我可以从命令行使用类似的东西
aws route53domains update-domain-nameservers ???
__ 或 __ 我可以预定义一个 aws kubernetes LoadBalancer Ingress 类似于在通过 gcloud 时执行预定义的静态 IP 吗?
显示已部署应用的 LoadBalancer Ingress URL 问题
kubectl describe svc
...输出
Name: aaa-deployment-407
Namespace: ruptureofthemundaneplane
Labels: app=bbb
pod-template-hash=4076262206
Selector: app=bbb,pod-template-hash=4076262206
Type: LoadBalancer
IP: 10.0.51.82
LoadBalancer Ingress: a244bodhisattva79c17cf7-61619.us-east-1.elb.amazonaws.com
Port: port-1 80/TCP
NodePort: port-1 32547/TCP
Endpoints: 10.201.0.3:80
Port: port-2 443/TCP
NodePort: port-2 31248/TCP
Endpoints: 10.201.0.3:443
Session Affinity: None
No events.
更新:
尝试新的命令行技术时出错(向@error2007s 的评论致敬)...发布这个
aws route53 list-hosted-zones
...输出
{
"HostedZones": [
{
"ResourceRecordSetCount": 6,
"CallerReference": "2D58A764-1FAC-DEB4-8AC7-AD37E74B94E6",
"Config": {
"PrivateZone": false
},
"Id": "/hostedzone/Z3II3949ZDMDXV",
"Name": "chainsawhaircut.com."
}
]
}
下面使用的重要位:hostedzone Z3II3949ZDMDXV
现在我按照 using this Doc (and this Doc as well) 作为文件 /change-resource-record-sets.json (注意我可以使用类似的 cli 调用成功更改类型 A ... 但是我需要更改类型A 的别名目标为 LoadBalancer Ingress URL)
{
"Comment": "Update record to reflect new IP address of fresh deploy",
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "chainsawhaircut.com.",
"Type": "A",
"TTL": 60,
"AliasTarget": {
"HostedZoneId": "Z3II3949ZDMDXV",
"DNSName": "a244bodhisattva79c17cf7-61619.us-east-1.elb.amazonaws.com",
"EvaluateTargetHealth": false
}
}
}]
}
在命令行我然后发出
aws route53 change-resource-record-sets --hosted-zone-id Z3II3949ZDMDXV --change-batch file:///change-resource-record-sets.json
给出了这个错误信息
An error occurred (InvalidInput) when calling the ChangeResourceRecordSets operation: Invalid request
有什么见解吗?
这是使用新生成的 kubernetes LoadBalancer Ingress URL
的值更新 aws route53 资源记录类型 A 所需的逻辑
第 1 步 - 通过发出
来识别您的托管区域 ID
aws route53 list-hosted-zones
...这里的输出是我的域的剪辑
"Id": "/hostedzone/Z3II3949ZDMDXV",
...重要的是,永远不要使用 hostedzone Z3II3949ZDMDXV 填充 json,它仅用作 cli 参数...还有第二个名称相似的令牌 HostedZoneId,它完全不同
第 2 步 - 查看您的 route53 域记录的当前值...问题:
aws route53 list-resource-record-sets --hosted-zone-id Z3II3949ZDMDXV --query "ResourceRecordSets[?Name == 'scottstensland.com.']"
...输出
[
{
"AliasTarget": {
"HostedZoneId": "Z35SXDOTRQ7X7K",
"EvaluateTargetHealth": false,
"DNSName": "dualstack.asomepriorvalue39e7db-1867261689.us-east-1.elb.amazonaws.com."
},
"Type": "A",
"Name": "scottstensland.com."
},
{
"ResourceRecords": [
{
"Value": "ns-1238.awsdns-26.org."
},
{
"Value": "ns-201.awsdns-25.com."
},
{
"Value": "ns-969.awsdns-57.net."
},
{
"Value": "ns-1823.awsdns-35.co.uk."
}
],
"Type": "NS",
"Name": "scottstensland.com.",
"TTL": 172800
},
{
"ResourceRecords": [
{
"Value": "ns-1238.awsdns-26.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400"
}
],
"Type": "SOA",
"Name": "scottstensland.com.",
"TTL": 900
}
]
...在上面的通知值
"HostedZoneId": "Z35SXDOTRQ7X7K",
这是第二个类似名称的令牌请勿使用错误的托管区域 ID
第 3 步 - 将下面的内容放入您的更改文件中 aws_route53_type_A.json (for syntax Doc see link mentioned in comment above)
{
"Comment": "Update record to reflect new DNSName of fresh deploy",
"Changes": [
{
"Action": "UPSERT",
"ResourceRecordSet": {
"AliasTarget": {
"HostedZoneId": "Z35SXDOTRQ7X7K",
"EvaluateTargetHealth": false,
"DNSName": "dualstack.a0b82c81f47d011e6b98a0a28439e7db-1867261689.us-east-1.elb.amazonaws.com."
},
"Type": "A",
"Name": "scottstensland.com."
}
}
]
}
确定上述字段的值"DNSName" ...在 aws 上部署 kubernetes 应用程序后,它会响应 LoadBalancer Ingress,如 cli 命令的输出所示:
kubectl describe svc --namespace=ruptureofthemundaneplane
...如
LoadBalancer Ingress: a0b82c81f47d011e6b98a0a28439e7db-1867261689.us-east-1.elb.amazonaws.com
...即使我的目标是执行命令行调用,我也可以通过进入 aws 控制台浏览器手动执行此操作...在 route53 上拉起我的域...
... 在这个浏览器选择列表可编辑文本框(绿色圆圈)中,我注意到 URL 神奇地添加了 : dualstack。以前我错过了那个神奇的字符串......所以 json 键 "DNSName" 想要这个
dualstack.a0b82c81f47d011e6b98a0a28439e7db-1867261689.us-east-1.elb.amazonaws.com.
终于执行变更请求
aws route53 change-resource-record-sets --hosted-zone-id Z3II3949ZDMDXV --change-batch file://./aws_route53_type_A.json
...输出
{
"ChangeInfo": {
"Status": "PENDING",
"Comment": "Update record to reflect new DNSName of fresh deploy",
"SubmittedAt": "2016-07-13T14:53:02.789Z",
"Id": "/change/CFUX5R9XKGE1C"
}
}
.. 现在确认更改已生效 运行 这将显示记录
aws route53 list-resource-record-sets --hosted-zone-id Z3II3949ZDMDXV
您也可以使用 external-dns 项目。
AWS 特定设置 can be found here
安装后可与注释一起使用,例如:external-dns.alpha.kubernetes.io/hostname: nginx.external-dns-test.my-org.com.
请注意需要正确设置 IAM 权限。
今天,当我在 aws 上使用 kubernetes 启动一个应用程序时,它公开了一个 public 可见的 LoadBalancer Ingress URL,但是 link 我的域可以访问该应用程序public,我需要在每次启动时在浏览器中手动进入 aws route53 控制台。我可以从命令行更新 aws route53 资源类型 A 以匹配最新的 Kubernetes LoadBalancer Ingress URL 吗?
Kubernetes over gcloud 面临这样的挑战,即必须预定义用于启动配置的静态 IP 或手动执行基于浏览器的域 linkage post 启动。在 aws 上,我希望我可以从命令行使用类似的东西
aws route53domains update-domain-nameservers ???
__ 或 __ 我可以预定义一个 aws kubernetes LoadBalancer Ingress 类似于在通过 gcloud 时执行预定义的静态 IP 吗?
显示已部署应用的 LoadBalancer Ingress URL 问题
kubectl describe svc
...输出
Name: aaa-deployment-407
Namespace: ruptureofthemundaneplane
Labels: app=bbb
pod-template-hash=4076262206
Selector: app=bbb,pod-template-hash=4076262206
Type: LoadBalancer
IP: 10.0.51.82
LoadBalancer Ingress: a244bodhisattva79c17cf7-61619.us-east-1.elb.amazonaws.com
Port: port-1 80/TCP
NodePort: port-1 32547/TCP
Endpoints: 10.201.0.3:80
Port: port-2 443/TCP
NodePort: port-2 31248/TCP
Endpoints: 10.201.0.3:443
Session Affinity: None
No events.
更新:
尝试新的命令行技术时出错(向@error2007s 的评论致敬)...发布这个
aws route53 list-hosted-zones
...输出
{
"HostedZones": [
{
"ResourceRecordSetCount": 6,
"CallerReference": "2D58A764-1FAC-DEB4-8AC7-AD37E74B94E6",
"Config": {
"PrivateZone": false
},
"Id": "/hostedzone/Z3II3949ZDMDXV",
"Name": "chainsawhaircut.com."
}
]
}
下面使用的重要位:hostedzone Z3II3949ZDMDXV
现在我按照 using this Doc (and this Doc as well) 作为文件 /change-resource-record-sets.json (注意我可以使用类似的 cli 调用成功更改类型 A ... 但是我需要更改类型A 的别名目标为 LoadBalancer Ingress URL)
{
"Comment": "Update record to reflect new IP address of fresh deploy",
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "chainsawhaircut.com.",
"Type": "A",
"TTL": 60,
"AliasTarget": {
"HostedZoneId": "Z3II3949ZDMDXV",
"DNSName": "a244bodhisattva79c17cf7-61619.us-east-1.elb.amazonaws.com",
"EvaluateTargetHealth": false
}
}
}]
}
在命令行我然后发出
aws route53 change-resource-record-sets --hosted-zone-id Z3II3949ZDMDXV --change-batch file:///change-resource-record-sets.json
给出了这个错误信息
An error occurred (InvalidInput) when calling the ChangeResourceRecordSets operation: Invalid request
有什么见解吗?
这是使用新生成的 kubernetes LoadBalancer Ingress URL
的值更新 aws route53 资源记录类型 A 所需的逻辑第 1 步 - 通过发出
来识别您的托管区域 IDaws route53 list-hosted-zones
...这里的输出是我的域的剪辑
"Id": "/hostedzone/Z3II3949ZDMDXV",
...重要的是,永远不要使用 hostedzone Z3II3949ZDMDXV 填充 json,它仅用作 cli 参数...还有第二个名称相似的令牌 HostedZoneId,它完全不同
第 2 步 - 查看您的 route53 域记录的当前值...问题:
aws route53 list-resource-record-sets --hosted-zone-id Z3II3949ZDMDXV --query "ResourceRecordSets[?Name == 'scottstensland.com.']"
...输出
[
{
"AliasTarget": {
"HostedZoneId": "Z35SXDOTRQ7X7K",
"EvaluateTargetHealth": false,
"DNSName": "dualstack.asomepriorvalue39e7db-1867261689.us-east-1.elb.amazonaws.com."
},
"Type": "A",
"Name": "scottstensland.com."
},
{
"ResourceRecords": [
{
"Value": "ns-1238.awsdns-26.org."
},
{
"Value": "ns-201.awsdns-25.com."
},
{
"Value": "ns-969.awsdns-57.net."
},
{
"Value": "ns-1823.awsdns-35.co.uk."
}
],
"Type": "NS",
"Name": "scottstensland.com.",
"TTL": 172800
},
{
"ResourceRecords": [
{
"Value": "ns-1238.awsdns-26.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400"
}
],
"Type": "SOA",
"Name": "scottstensland.com.",
"TTL": 900
}
]
...在上面的通知值
"HostedZoneId": "Z35SXDOTRQ7X7K",
这是第二个类似名称的令牌请勿使用错误的托管区域 ID
第 3 步 - 将下面的内容放入您的更改文件中 aws_route53_type_A.json (for syntax Doc see link mentioned in comment above)
{
"Comment": "Update record to reflect new DNSName of fresh deploy",
"Changes": [
{
"Action": "UPSERT",
"ResourceRecordSet": {
"AliasTarget": {
"HostedZoneId": "Z35SXDOTRQ7X7K",
"EvaluateTargetHealth": false,
"DNSName": "dualstack.a0b82c81f47d011e6b98a0a28439e7db-1867261689.us-east-1.elb.amazonaws.com."
},
"Type": "A",
"Name": "scottstensland.com."
}
}
]
}
确定上述字段的值"DNSName" ...在 aws 上部署 kubernetes 应用程序后,它会响应 LoadBalancer Ingress,如 cli 命令的输出所示:
kubectl describe svc --namespace=ruptureofthemundaneplane
...如
LoadBalancer Ingress: a0b82c81f47d011e6b98a0a28439e7db-1867261689.us-east-1.elb.amazonaws.com
...即使我的目标是执行命令行调用,我也可以通过进入 aws 控制台浏览器手动执行此操作...在 route53 上拉起我的域...
... 在这个浏览器选择列表可编辑文本框(绿色圆圈)中,我注意到 URL 神奇地添加了 : dualstack。以前我错过了那个神奇的字符串......所以 json 键 "DNSName" 想要这个
dualstack.a0b82c81f47d011e6b98a0a28439e7db-1867261689.us-east-1.elb.amazonaws.com.
终于执行变更请求
aws route53 change-resource-record-sets --hosted-zone-id Z3II3949ZDMDXV --change-batch file://./aws_route53_type_A.json
...输出
{
"ChangeInfo": {
"Status": "PENDING",
"Comment": "Update record to reflect new DNSName of fresh deploy",
"SubmittedAt": "2016-07-13T14:53:02.789Z",
"Id": "/change/CFUX5R9XKGE1C"
}
}
.. 现在确认更改已生效 运行 这将显示记录
aws route53 list-resource-record-sets --hosted-zone-id Z3II3949ZDMDXV
您也可以使用 external-dns 项目。
AWS 特定设置 can be found here
安装后可与注释一起使用,例如:external-dns.alpha.kubernetes.io/hostname: nginx.external-dns-test.my-org.com.
请注意需要正确设置 IAM 权限。