- 外部DNS服务
- 最佳实践
- 需要配置AWS IAM权限
- 启动 Route53 服务
- 使用Route53的服务
- 删除 Route53 服务
- 为外部DNS使用特定的IP
外部DNS服务
在应用商店中,Rancher提供了多种的DNS服务并且这些服务可以监听rancher-metadata的事件,并根据metadata的更变生成DNS记录。我们会以Route53作为例子说明外部DNS是如何工作的,但Rancher还有其他由其他DNS服务商提的供社区版服务。
最佳实践
- 在每个您启动的Rancher环境中,应该有且只有1个
route53
服务的实例。 - 多个Rancher实例不应该共享同一个
hosted zone
。
需要配置AWS IAM权限
下面的IAM权限是Route53 DNS所需要的最小权限。请确保您设置的主机AWS安全密钥(Access Key ID / Secret Access Key)或者主机IAM权限至少被配置了如下权限。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:GetHostedZone",
"route53:GetHostedZoneCount",
"route53:ListHostedZonesByName",
"route53:ListResourceRecordSets"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"route53:ChangeResourceRecordSets"
],
"Resource": [
"arn:aws:route53:::hostedzone/<HOSTED_ZONE_ID>"
]
}
]
}
注意: 当使用这个JSON文档在AWS中创建自定义IAM规则时,请使用Route53所在区域或者通配符(’*‘)来替换
<HOSTED_ZONE_ID>
。
启动 Route53 服务
在 应用商店 标签页中,您可以选择 Route53 DNS Stack。
为您的应用栈填写 名称,并填写必要的 描述。
在 配置选项 中,您需要提供以下信息:
名称 | 值 |
---|---|
AWS Access Key | 访问AWS API的Access key |
AWS Secret Key | 访问AWS API的Secret key |
AWS Region | 在AWS中的区域名称。我们建议您填写一个与您服务器相近的区域。他会转换成Rancher Route53发送DNS更新请求的地址。 |
Hosted Zone | Route53 hosted zone。这个必须在您的Route53实例上预创建。 |
在完成表单后,点击 创建。一个带有 route53
服务的应用栈将会被创建,您只需要启动这个服务。
使用Route53的服务
route53
服务只会为在Host上映射端口的服务生成DNS记录,每一个Rancher生成的DNS记录,他使用以下格式为服务创建一个fqdn:
fqdn=<serviceName>.<stackName>.<environmentName>.<yourHostedZoneName>
在AWS的Route 53中,他会以name=fqdn,value=[服务所在的host的ip地址列表]的一个记录集合呈现。Rancher route53
服务只会管理以
一旦DNS记录被设置在AWS的Route 53上,生成的fqdn会返回到Rancher,并会设置 服务.fqdn 字段。您可以在服务下拉菜单的 在API中查看 并查询 fqdn 找到fqdn字段。
当在浏览器使用fqdn,他会被指向到服务中的其中一个容器。如果服务中容器的IP地址发生了变化,这些变化会在AWS的Route 53服务同步更新。由于用户一直在使用fqdn,所有这些更变对用户是透明的。
注意: 在
route53
服务被启动后,任何已经部署并使用了host端口的服务都会获得一个fqdn。
删除 Route53 服务
当 route53
从Rancher被移除,在AWS Route 53服务中的记录并不会被移除。这些记录需要在AWS中手工移除。
为外部DNS使用特定的IP
在默认下,Rancher DNS选择注册在Rancher Server中的主机IP去暴露服务。其中会有一个应用场景是主机在一个私有网络中,但主机将需要使用外部DNS在公网中暴露服务。您需要在启动外部DNS服务前添加一个主机标签,来指定在外部DNS中使用的IP地址。
在启动外部服务前,需要添加以下标签到主机上。标签的值需要是Rancher的Route53 DNS服务上要用到的IP。如果这个标签没有设置在主机上,Rancher的Route53服务将会默认使用主机注册在Rancher上的IP的地址。
io.rancher.host.external_dns_ip=<IP_TO_BE_USED_FOR_EXTERNAL_DNS>