【问题标题】:Kubernetes not resolving node serviceKubernetes 无法解析节点服务
【发布时间】: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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 2015-12-21
      • 2019-05-07
      相关资源
      最近更新 更多