Kubernetes 为我的部署分配了什么主机?

What host does Kubernetes assign to my deployment?

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

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

Exception: I/O error on GET request for "http://product-app:8080/product/123": product-app; nested exception is 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

您需要为 product-deploy Deployment 定义一个 Service 对象,以便其他 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 更新时更改。

然后您可以使用 product-servicecomposite-app 连接到 product-app pod。