【问题标题】:How to set the dns option in Azure web app for containers如何在 Azure Web 应用中为容器设置 dns 选项
【发布时间】:2018-08-23 16:42:17
【问题描述】:

这是运行容器时发生的事情。我想知道是否有办法为具有自定义 DNS 的容器启动 Web 应用程序。

我的 ILB-ASE 中有 5 个微服务 他们需要能够使用我在 VNet 中的自定义 DNS 服务器相互调用。当我检查 resolv.conf 时,我看到了 127.0.0.11。我需要将其设置为我自己的自定义 dns 服务器。

我们如何在此处注入我的自定义 DNS 值?

如果可以,我们应该使用appsettings 吗?Web 应用程序中容器的值是什么?

所以我可以使用 --dns 选项

Azure 运行它的神秘部分。一些值来自 appsettings。

2018-08-23 14:12:56.100 信息 - docker run -d -p 13940:5001 --name xxx -e DOCKER_CUSTOM_IMAGE_NAME=xxx.azurecr.io/xxx:558 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITES_PORT=5001 -e WEBSITE_SITE_NAME=xxx -e WEBSITE_AUTH_ENABLED=假 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_INSTANCE_ID=xxx -e HTTP_LOGGING_ENABLED=1 xxx.azurecr.io/xxx:558

=====码头日志=========

2018_08_23_RD0003FF2D0408_default_docker.log:

2018-08-23T14:12:49.755843301Z [40m[1m[33mwarn[39m[22m[49m: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]

2018-08-23T14:12:49.755897801Z 未配置 XML 加密器。钥匙 {xxx-xxx-xxx-xxx-xxx} 可能会以未加密的形式保存到存储中。

2018-08-23T14:12:54.761216323Z [40m[1m[33mwarn[39m[22m[49m: Microsoft.AspNetCore.Server.Kestrel[0]

2018-08-23T14:12:54.761251623Z 覆盖地址“http://+:80”。 而是绑定到 UseKestrel() 中定义的端点。

2018-08-23T14:12:54.908189021Z 托管环境:生产

2018-08-23T14:12:54.908386123Z 内容根路径:/app

2018-08-23T14:12:54.908961927Z 现在收听:http://0.0.0.0:5001

2018-08-23T14:12:54.909256229Z 应用程序已启动。按 Ctrl+C 到 关闭。

2018_08_23_RD0003FF2D0408_docker.log:

2018-08-23 14:12:44.125 信息 - 回收容器因为 AppFrameworkVersionChange 和 appFrameworkVersion = xxx.xxx.io/xxx:558

2018-08-23 14:12:45.900 信息 - 站点的启动容器

2018-08-23 14:12:45.900 信息 - docker run -d -p 30464:5001 --name xxx -e DOCKER_CUSTOM_IMAGE_NAME=xxx.azurecr.io/xxx:549 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITES_PORT=5001 -e WEBSITE_SITE_NAME=xxx -e WEBSITE_AUTH_ENABLED=假 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_INSTANCE_ID=xxx -e HTTP_LOGGING_ENABLED=1 xxx.xxx.io/xxx:558

2018-08-23 14:12:55.972 信息 - 站点 xxx 的容器 xxx 已初始化 成功。

2018-08-23 14:12:55.976 信息 - 回收容器因为 AppSettingsChange 和 isMainSite = True

2018-08-23 14:12:56.099 信息 - 站点的启动容器

2018-08-23 14:12:56.100 信息 - docker run -d -p 13940:5001 --name xxx -e DOCKER_CUSTOM_IMAGE_NAME=xxx.azurecr.io/xxx:558 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITES_PORT=5001 -e WEBSITE_SITE_NAME=xxx -e WEBSITE_AUTH_ENABLED=假 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_INSTANCE_ID=xxx -e HTTP_LOGGING_ENABLED=1 xxx.azurecr.io/xxx:558

2018-08-23 14:13:05.385 信息 - 站点 xxx 的容器 xxx 已初始化 成功。

【问题讨论】:

  • 不,我需要能够设置应用服务计划的 DNS。所以我的微服务可以互相调用
  • 由于某种原因我被否决了,但我很确定服务发现是微服务的最佳解决方案。这是一个已经建立的行业标准。你试一试了吗?我希望它有所帮助。

标签: azure docker containers dockerfile azure-web-app-service


【解决方案1】:

我们在 Github 和 Reddit 上回复了您的问题。在此处重新发布我们的回复以提高知名度。

"目前,有一个解决方法:您应该将默认 resolv.conf 修改为自定义 DNS IP,然后通过在入口点脚本中添加 COPY 命令并指向自定义resolv.conf 到 /etc。

不过,我们正在为此研究更好的解决方案,因此无需手动更新 resolv.conf,敬请期待。”

【讨论】:

    【解决方案2】:

    您不应使用 DNS 与微服务通信,而应使用 service registry

    查看Microsoft paper 谈论这个:

    每个微服务都有一个唯一的名称 (URL),用于解析其 地点。您的微服务需要在任何地方都可寻址 跑步。如果您必须考虑哪台计算机正在运行 特定的微服务,事情可能会很快变坏。以同样的方式 DNS 将 URL 解析到特定计算机,您的微服务 需要有一个唯一的名称,以便它的当前位置是 可发现的。微服务需要可寻址的名称来使它们 独立于它们运行的​​基础设施。这个 意味着您的服务方式之间存在交互 部署以及如何发现它,因为需要有一个服务 注册表。同样,当计算机出现故障时,注册表 service 必须能够指示服务现在在哪里运行。

    如您所见,最佳解决方案取决于您的部署模型。查看有关容器的说明:

    在一些微服务部署环境(称为集群, 在后面的部分中介绍),服务发现是内置的。为了 例如,在 Azure 容器服务环境中,Kubernetes 和 带有 Marathon 的 DC/OS 可以处理服务实例注册和 注销。他们还在每个播放的集群主机上运行一个代理 服务器端发现路由器的作用。另一个例子是 Azure Service Fabric,它还通过它的 开箱即用的命名服务。

    希望对你有帮助!

    【讨论】:

    • 感谢您的回答。 @注册服务必须能够指示服务现在在哪里运行。@我们没有这方面的预算。你如何比较 Marathon 和 Consul?
    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 2018-05-03
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2019-04-20
    相关资源
    最近更新 更多