处理具有多个容器的单个 pod

时间:2021-05-26 18:14:09

标签: kubernetes endpoint kubernetes-pod

我需要将 multipod 设置转换为具有多个容器的单个 pod。我让 pod x 运行 x 微服务,而 pod y 运行 y 微服务,其端点低于其余端点。

  • http://x:8080/{context path-x}/endpoint
  • http://y:8080/{context path-y}/endpoint

我想让 pod z 带有 x 和 y 微服务,容器 x 暴露在 8080 端口上,y 暴露在同一个 pod 中的 8081 端口上。我可以使用多容器 pod 来实现这些。

我的问题是现在网址已更改

  • http://z:8080/{context path-x}/endpoint
  • http://z:8081/{context path-y}/endpoint

我正在寻找可以在不更改 URL 或使用以下 URL 的情况下点击端点的方法

  • http://x:8080/{context path-x}/endpoint
  • http://y:8081/{context path-y}/endpoint

我的实际项目要求在单个 Pod 上有 5 个容器,并且暴露了 100 个端点

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

K8s 服务是公开您的应用程序的方式。由于您有两个应用程序,并且希望将它们作为单个 Pod 中的两个不同容器运行,并且您希望应用程序 API URL 的更改最少,那么只需创建两个不同的具有您的目标端口的服务即可。因此,您需要对应用程序的 APP 网址进行 0 次更改。

在 K8s 集群中,您可以简单地使用服务名称作为来自同一命名空间的主机名。你可以看到FQDN (fully qualified domain name) convention for a service

因此,您可以创建两个名为 xy 的服务,其中 x 的端口为 8080,y 的端口为 8081。因此您可以使用与以前相同的网址。

<块引用>

注意:实现目标的方式可能不同,但可能会出现不同的问题。

答案 1 :(得分:0)

以下是我解决问题的方法:

应用程序部署文件(部署 z 上的 x 和 y 容器)


---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: z
spec:
  replicas: 1
  progressDeadlineSeconds: 600
  selector:
    matchLabels:
      component: z
  template:
    metadata:
      annotations:
        version: v1.0
      labels:
        component: z
        occloud.oracle.com/open-network-policy: allow
      name: z
    spec:
      containers:
        - name: x
          image:x:dev
          ports:
            - containerPort: 8080
        - name: y
          image: y:dev
          ports:
            - containerPort: 8081
---
kind: Service
apiVersion: v1
metadata:
  name: x
  annotations:
    version: v1.0
spec:
  selector:
    component: z
  ports:
     - name: x
       port: 8080
       targetPort: 8080
  type: ClusterIP           
---
kind: Service
apiVersion: v1
metadata:
  name: y
  annotations:
    version: v1.0
spec:
  selector:
    component: z
  ports:
     - name: y
       port: 8080
       targetPort: 8081
  type: ClusterIP

http://x:8080/{context path-x}/endpoint http://y:8080/{context path-y}/endpoint

相关问题