我需要将 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 个端点
我怎样才能做到这一点?
答案 0 :(得分:1)
K8s 服务是公开您的应用程序的方式。由于您有两个应用程序,并且希望将它们作为单个 Pod 中的两个不同容器运行,并且您希望应用程序 API URL 的更改最少,那么只需创建两个不同的具有您的目标端口的服务即可。因此,您需要对应用程序的 APP 网址进行 0 次更改。
在 K8s 集群中,您可以简单地使用服务名称作为来自同一命名空间的主机名。你可以看到FQDN (fully qualified domain name) convention for a service。
因此,您可以创建两个名为 x
和 y
的服务,其中 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