- 就我而言,这更像是一个开发问题,而不是服务器问题,但它位于两者的边界上,所以如果这是共识,请随时迁移到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规则
map / http://web/
因此,所有传入的请求都Map到上述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
(see 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
中运行时,流量服务器会抱怨无法解析web
。
所以,我可以让事情在两个平台上工作,但这需要更改配置。我可以为traffic-server启动一个启动脚本,以确定我们是在kube还是docker中运行,并根据我们运行的位置编写上面的配置行,但理想情况下,我希望DNS在各个平台上保持一致。我对DNS(特别是DNS默认域/本地域)的理解是不完整的。
有什么建议吗?理想情况下,docker-compose的本地域似乎是这里的出路。
2条答案
按热度按时间carvr3hs1#
默认的Kubernetes本地域是
这意味着kubernetes下
web
服务的完全限定名是web.default.svc.cluster.local
因此,在
docker-compose
文件中,在trafficserver config部分下,我可以使用以下docker-compose.yml
语法为web
创建别名web.default.svc.cluster.local
:并更新trafficserver中的Map配置为:
并且现在
web
服务可以跨docker-compose
和kubernetes
使用相同的域名到达。dgtucam12#
我发现了同样的问题,但用另一种方式解决了它,经过了许多痛苦的调试。
对于
CONFIG proxy.config.dns.search_default_domains INT 1
,Apache Traffic Server将在/etc/resolve.conf中逐个追加在search
下找到的名称,直到找到匹配。在我的例子中,resolve.conf指向
company.intra
,这样我就可以根据这个来命名我的服务(所有来自Apache Traffic Server的服务有了这个更改,我根本不需要对remap.config进行任何更改,使用的URL仍然只能是“web”,因为它会扩展为一个与两个环境匹配的名称,
docker.compose中的
web.company.intra
kubernetes中的
web.default.svc.local.cluster