就我而言,这更像是一个开发问题而不是服务器问题,但它非常位于两者的边界上,所以如果这是共识,请随意迁移到 serverfault.com)。
我有一个服务,我们称之为它web
,它在一个docker-compose.yml
文件中声明如下:
web:
image: webimage
command: run start
build:
context: ./web
dockerfile: Dockerfile
在这之前,我有一个运行 Apache Traffic Server 的反向代理服务器。url重映射配置文件中有一个简单的映射规则
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 的本地域似乎是这里的方式。