【问题标题】:What host does Kubernetes assign to my deployment?Kubernetes 为我的部署分配什么主机?
【发布时间】:2021-02-14 14:29:35
【问题描述】:

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

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

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

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

  • product
  • product-app.default.pod.cluster.local
  • product-app

这是我的 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-app 的服务。如果复合应用程序 pod 需要访问产品应用程序容器,那么您首先需要为产品应用程序创建一个服务(使用选择器“应用程序:产品应用程序”和端口 8080)。完成此操作后,http://product-app 将解析为集群内的产品应用程序 pod。

标签: kubernetes deployment microservices


【解决方案1】:

您需要为product-deploy Deployment 定义一个Service 对象,并让其他pod 能够连接到它。如果不需要将Service 暴露给外部世界,则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。

【讨论】:

  • 其实已经说对了:You can then connect to the product-app pod from the composite-app using product-service,如果您发现这里有什么问题,请告诉我,我可以解决它吗?
  • 我的错。我误读了答案。仍在学习这方面的技巧。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 2019-11-27
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多