首页 > 解决方案 > Kubernetes 为我的部署分配什么主机?

问题描述

我有两个 Kubernetes 部署:composite-app(1 个 pod)和product-app(2 个 pod),它们都侦听端口 8080。第一个有时需要调用第二个。

但是,第一个部署找不到第二个。当它尝试使用product.app主机调用它时失败:

例外:“http://product-app:8080/product/123”的 GET 请求出现 I/O 错误:product-app; 嵌套异常是 UnknownHostException

我使用的是正确的主机吗?到目前为止,我已经尝试过(无济于事):

这是我的 YAML:

apiVersion: v1
kind: Service
metadata:
  name: composite-service
spec:
  type: NodePort
  selector:
    app: composite-app
  ports:
    - targetPort: 8080
      port: 8080
      nodePort: 30091
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: composite-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: composite-app
  template:
    metadata:
      labels:
        app: composite-app
    spec:
      containers:
      - name: composite-container
        image: 192.168.49.2:2376/composite-ms:latest
        imagePullPolicy: Never
        ports:
        - containerPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: product-deploy
spec:
  replicas: 2
  selector:
    matchLabels:
      app: product-app
  template:
    metadata:
      labels:
        app: product-app
    spec:
      containers:
      - name: product-container
        image: 192.168.49.2:2376/product-ms:latest
        imagePullPolicy: Never
        ports:
        - containerPort: 8080

标签: kubernetesdeploymentmicroservices

解决方案


您还需要为 pod 定义一个Service对象,product-deploy Deployment以便其他 pod 能够连接到它。如果不需要暴露于外部世界,则可以Service是类型。ClusterIP

apiVersion: v1
kind: Service
metadata:
  name: product-service
spec:
  type: ClusterIP
  selector:
    app: product-app
  ports:
    - targetPort: 8080
      port: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: product-deploy
spec:
  replicas: 2
  selector:
    matchLabels:
      app: product-app
  template:
    metadata:
      labels:
        app: product-app
    spec:
      containers:
      - name: product-container
        image: 192.168.49.2:2376/product-ms:latest
        imagePullPolicy: Never
        ports:
        - containerPort: 8080

您可以在没有服务的情况下使用 pod 的 IP 连接到另一个 pod。但是,不建议这样做,因为 pod 的 IP 可以在 pod 更新时更改。

然后,您可以从using连接到product-apppod 。composite-appproduct-service


推荐阅读