Kubernetes没有解析节点服务

时间:2018-02-06 00:43:39

标签: dns kubernetes google-cloud-platform microservices google-kubernetes-engine

我在Kubernetes中遇到内部DNS /服务解决方案的问题,而我似乎无法追踪问题。我有一个运行Kong的api-gateway pod,它通过内部服务名称调用其他服务,即ng serve --host 0.0.0.0 --port 4200。直到最近才开始工作。我尝试将另外3个服务部署到两个名称空间,分段和生产。

第一个服务在调用srv-name.staging.svc.cluster.local时按预期工作,但是相同的代码似乎在生产服务中不起作用。而另外两个服务在这两个名称空间中都不值得。

我得到的行为是暂停。如果我从我的网关pod中卷曲这些服务,除了部署的第一个服务(booking-service.staging.svc.cluster.local)之外,它们都会超时。当我从同一个pod中的另一个容器调用这些服务时,它们执行按预期工作。

我为每个希望向客户端公开的服务设置了Node服务。

以下是Kubernetes部署的示例:

booking-service.staging.svc.cluster.local

我使用go-micro https://github.com/micro/go-micro和Kubernetes预配置。这在一个案例中再次起作用绝对正常,但并非所有其他案例。这让我相信它与代码无关。它也适用于本地。

当我从另一个pod执行--- # 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 时,它会解析名称并按预期查找内部Node服务的群集IP。当我尝试cURL该IP地址时,我得到相同的超时行为。

我在Google Cloud上使用Kubernetes 1.8。

1 个答案:

答案 0 :(得分:0)

我不明白为什么你认为这是Kubernetes中内部DNS /服务解析的问题,因为当你执行DNS查找时它可以工作,但是如果你查询那个IP就会出现连接超时。

  • 如果您从pod外部卷曲这些服务,除了部署的第一个服务之外,无论您使用的是IP还是域名,它们都会超时。
  • 当您从同一个窗格中的另一个容器调用这些服务时,它们会按预期工作。

pod之间的连接似乎不仅仅是DNS问题,因此我会将您的故障排除集中在这个方向,但如果我错了,请纠正我。

您是否可以从容器中执行经典网络故障排除(ping,telnet,traceroute)到​​DNS查找给出的IP,以及从其中一个容器中执行超时到其他容器之一并使用结果