【发布时间】:2018-01-05 15:14:11
【问题描述】:
就我而言,这更像是一个开发问题而不是服务器问题,但它非常位于两者的边界上,所以如果是这样,请随时迁移到 serverfault.com共识)。
我有一个服务,我们称之为web,它在docker-compose.yml文件中声明如下:
web:
image: webimage
command: run start
build:
context: ./web
dockerfile: Dockerfile
在此之前,我有一个运行 Apache Traffic Server 的反向代理服务器。 url remapping config file中有一个简单的映射规则
map / http://web/
所以所有传入的请求都映射到上述web 服务。这在docker-compose 中非常有效,但是当我使用以下服务描述将服务移动到 kubernetes 时:
apiVersion: v1
kind: Service
metadata:
labels:
io.kompose.service: web
name: web
spec:
clusterIP: None
ports:
- name: headless
port: 55555
targetPort: 0
selector:
io.kompose.service: web
status:
loadBalancer: {}
...流量服务器抱怨,因为它无法解析 DNS 名称 web。
我可以通过以下配置更改稍微更改流量服务器的 DNS 行为来解决此问题:
CONFIG proxy.config.dns.search_default_domains INT 1
(见https://docs.trafficserver.apache.org/en/7.1.x/admin-guide/files/records.config.en.html#dns)
此配置更改描述如下:
Traffic Server 可以尝试通过扩展到本地域来解析不合格的主机名。例如,如果客户端向不合格的主机(例如 host_x)发出请求,并且 Traffic Server 本地域是 y.com,那么 Traffic Server 会将主机名扩展为 host_x.y.com。
现在一切都在 Kubernetes 中运行良好。
但是,在docker-compose 中运行时,traffic-server 抱怨无法解析web。
所以,我可以在两个平台上运行,但这需要更改配置。我可以为流量服务器启动一个启动脚本,以确定我们是在 kube 还是 docker 中运行,并根据我们运行的位置编写上面的配置行,但理想情况下,我希望 DNS 跨平台保持一致.我对 DNS(尤其是 DNS 默认域/本地域)的理解不完整。
有什么建议吗?理想情况下,docker-compose 的本地域似乎是这里的方式。
【问题讨论】:
标签: docker dns kubernetes docker-compose apache-traffic-server