【问题标题】:Handling a single pod with multiple container处理具有多个容器的单个 pod
【发布时间】:2021-08-15 00:45:51
【问题描述】:

我需要将多容器设置转换为具有多个容器的单个容器。我让 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 实现这些目标。

我的问题是 URL 已更改

  • 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 个端点

我怎样才能做到这一点?

【问题讨论】:

  • 你可以使用不同的服务吗?
  • 如果你想要 0 改变 url,那么你需要 2 个名为 x & y 的服务。 x 公开 8080 端口, y 公开 8081 端口。收到了吗?
  • 感谢您的回复。 @Shudipta Sharma。我认为这个解决方案对我们有用。我现在创建了 2 个服务来访问 8080 和 8081,旧 url 可以更改端口号。
  • 太好了,你已经解决了。请提供答案并将其标记为已接受。
  • 添加了答案

标签: kubernetes endpoint kubernetes-pod


【解决方案1】:

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

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

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

注意:实现目标可能存在不同的方法,但可能会产生不同的问题。

【讨论】:

    【解决方案2】:

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

    应用程序部署文件(部署 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/{上下文路径-x}/endpoint http://y:8080/{context path-y}/endpoint

    【讨论】:

      猜你喜欢
      • 2020-08-18
      • 2021-07-08
      • 2019-09-19
      • 2017-08-25
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 2018-03-15
      相关资源
      最近更新 更多