Kubernetes服务发现无法解析minikube上的服务主机

Ser*_*hyr 5 dns service-discovery kubernetes kube-dns minikube

我正在尝试在minikube安装上运行的k8上运行两项服务。因此,我有服务FooBar,因此在访问服务时,Foo它必须触发服务Bar才能获取数据。

这是Foo服务 的部署配置foo-deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: foo-server
  labels:
    app: foo-server
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: foo-server
        serving: "true"
    spec:
      containers:
      - name: foo-server
        image: foo-container
        env:
        - name: BAR_SERVICE_URL
          value: http://bar-server:8081
        ports:
        - containerPort: 8080
          name: http
Run Code Online (Sandbox Code Playgroud)

foo-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: foo-server
  labels:
    app: foo-server
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    name: http
  selector:
    app: foo-server
    serving: "true"
Run Code Online (Sandbox Code Playgroud)

BAR_SERVICE_URLEVN变量内使用Foo这样的服务知道主机Bar。这里是为服务配置Bar服务 bar-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: bar-server
  labels:
    app: bar-server
spec:
  type: NodePort
  ports:
  - port: 8081
    targetPort: 8081
    name: http
  selector:
    app: bar-server
Run Code Online (Sandbox Code Playgroud)

bar-deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: bar-server-v1
  labels:
    app: bar-server
    version: "1.0"
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: bar-server
        version: "1.0"
        serving: "true"
    spec:
      containers:
      - name: bar-server
        image: bar-container
        ports:
        - containerPort: 8081
          name: http
Run Code Online (Sandbox Code Playgroud)

当我使用Foominikube ip和公开的服务端口访问服务时,在pod日志中收到以下错误:

2018-02-08 14:32:25.875 ERROR 1 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://bar-server:8081/endpoint": bar-server; nested exception is java.net.UnknownHostException: bar-server] with root cause

java.net.UnknownHostException: bar-server
Run Code Online (Sandbox Code Playgroud)

但是,我可以bar-server/endpoint像这样使用minikube ip和暴露端口访问http://192.168.99.100:31168/endpoint

因此,看起来我可以从集群外部访问FooBar服务。但是Foo服务无法解析Bar服务主机,也无法访问它。

UPD:这是一些更新,其中包含麻烦的详细信息。

  • minikubekube-dns插件被启用。
  • Foopod的范围尝试wgetBar服务端点。我可以通过的IP地址来执行此操作,bar-server但不能使用bar-server:8081/endpoint
  • 尝试nslookup kubernetes.default.svc.cluster.local localhost看起来不错。这是输出:

    服务器:127.0.0.1地址1:127.0.0.1本地主机

  • 另外,dnspod查找并正在运行。这是输出kubectl get pods -n=kube-system | grep -i dns

    kube-dns-6777479f6b-vxd7m 3/3运行9 1d

Lev*_*sov 1

尝试环境变量 BAR_SERVER_SERVICE_HOST。不要注入它,kubernetes 为同一命名空间内的服务注入它

在此处阅读有关服务发现选项的信息: ​​https://kubernetes.io/docs/concepts/services-networking/service/#discovering-services