【问题标题】:Kubernetes Communication between servicesKubernetes服务之间的通信
【发布时间】:2018-08-19 22:40:39
【问题描述】:

出于学习目的,我在谷歌云上的集群中有两个服务:

具有以下 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 应用程序,它只对 api 服务进行休息调用,如 axios.get('http://myapp-api')

问题是调用失败并且无法找到请求的端点。我目前是否缺少任何其他配置来发现 API 服务?

附:两个服务都在运行,我可以通过 localhost 代理连接到它们。

【问题讨论】:

标签: kubernetes google-kubernetes-engine


【解决方案1】:

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

【讨论】:

  • 感谢您的意见! http 调用发生在服务器上。它一定是我在配置方面遗漏的东西。
  • 好的,也许你可以更新问题或对问题发表评论,我会删除这个答案
猜你喜欢
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 2020-12-12
  • 2020-07-21
  • 1970-01-01
  • 2016-06-10
  • 2013-04-10
相关资源
最近更新 更多