Kubernetes服务之间的通信

时间:2018-08-19 13:50:29

标签: kubernetes google-kubernetes-engine

出于学习目的,我在Google云上的群集中有两项服务:

具有以下k8配置的API服务:

deployment.yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: myapp-api
  labels:
    app: myapp-api
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: myapp-api
    spec:
      containers:
        - image: gcr.io/prefab-basis-213412/myapp-api:0.0.1
          name: myapp-api
          ports:
            - containerPort: 3000

service.yaml

kind: Service
apiVersion: v1
metadata:
  name: myapp-api
spec:
  selector:
    app: myapp-api
  ports:
  - protocol: TCP
    port: 80
    targetPort: 3000

还有第二项服务,称为前端,该服务已公开:

deployment.yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: myappfront-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: myappfront
    spec:
      containers:
        - image: gcr.io/prefab-basis-213412/myappfront:0.0.11
          name: myappfront-deployment
          ports:
          - containerPort: 3000

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: myappfront-service
spec:
  type: LoadBalancer
  selector:
    app: myappfront
  ports:  
    - port: 80
      targetPort: 3000

前端服务基本上是一个nodejs应用程序,它仅对 axios.get('http://myapp-api')这样的api服务进行其余调用。

问题是呼叫失败,并且无法找到请求的端点。对于API服务,我目前缺少任何其他配置吗?

P.S。两种服务都在运行,我可以通过从本地主机代理连接到它们。

1 个答案:

答案 0 :(得分:0)

由于您可以在代理时使用服务,因此听起来好像您已经完成了针对群集内问题的大多数调试步骤(https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/)。这表明问题可能不在群集内。进行HTTP调用时要注意前端。它可能在带有节点的服务器中,但是鉴于您看到了这个问题,建议您在浏览器中。 (如果看到可以在浏览器控制台中看到该调用,则为。)如果在浏览器中进行前端的调用,则它无权访问Kubernetes dns,并且群集内部服务名称将无法解析。为了解决这个问题,您可以使后端服务LoadBalancer并将外部名称传递到前端。