【发布时间】:2018-07-15 23:18:11
【问题描述】:
我在 Kubernetes 中遇到了内部 DNS/服务解析问题,我似乎无法找到问题所在。我有一个运行 Kong 的 api-gateway pod,它通过内部服务名称调用其他服务,即srv-name.staging.svc.cluster.local。直到最近它工作正常。我尝试将另外 3 个服务部署到两个命名空间中,即登台和生产。
第一个服务在调用booking-service.staging.svc.cluster.local 时按预期工作,但是相同的代码在生产服务中似乎不起作用。而另外两个服务在任何一个命名空间中都不值得。
我得到的行为是超时。如果我从网关 pod 卷曲这些服务,它们都会超时,除了部署的第一个服务 (booking-service.staging.svc.cluster.local)。当我从同一个 pod 中的另一个容器调用这些服务时,它们确实按预期工作。
我为我希望向客户端公开的每个服务设置了节点服务。
这是一个 Kubernetes 部署示例:
---
# API
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: {{SRV_NAME}}
spec:
replicas: 1
template:
metadata:
labels:
app: {{SRV_NAME}}
spec:
containers:
- name: booking-api
image: microhq/micro:kubernetes
args:
- "api"
- "--handler=rpc"
env:
- name: PORT
value: "8080"
- name: ENV
value: {{ENV}}
- name: MICRO_REGISTRY
value: "kubernetes"
ports:
- containerPort: 8080
- name: {{SRV_NAME}}
image: eu.gcr.io/{{PROJECT_NAME}}/{{SRV_NAME}}:latest
imagePullPolicy: Always
command: [
"./service",
"--selector=static"
]
env:
- name: MICRO_REGISTRY
value: "kubernetes"
- name: ENV
value: {{ENV}}
- name: DB_HOST
value: {{DB_HOST}}
- name: VERSION
value: "{{VERSION}}"
- name: MICRO_SERVER_ADDRESS
value: ":50051"
ports:
- containerPort: 50051
name: srv-port
---
apiVersion: v1
kind: Service
metadata:
name: booking-service
spec:
ports:
- name: api-http
port: 80
targetPort: 8080
protocol: TCP
selector:
app: booking-api
我正在使用带有 Kubernetes 预配置的 go-micro https://github.com/micro/go-micro。在一种情况下,这再次工作绝对没问题,但不是所有其他情况。这让我相信它与代码无关。它在本地也可以正常工作。
当我从另一个 pod 执行 nslookup 时,它会解析名称并按预期找到内部节点服务的集群 IP。当我尝试 cURL 该 IP 地址时,我会得到相同的超时行为。
我在 Google Cloud 上使用 Kubernetes 1.8。
【问题讨论】:
标签: dns kubernetes google-cloud-platform microservices google-kubernetes-engine