Kubernetes 容器端口设置类似于 docker-compose?
Kubernetes container ports setup similar to docker-compose?
我在设置我的 k8s pods 时遇到了问题。我的麻烦是我有多个容器监听相同的端口 (80,443)。在远程机器上,我通常使用 docker-compose 和 'ports - 12345:80' 来设置它。对于 K8s,从我发现的所有示例来看,对于容器,唯一的选择是公开一个端口,而不是代理它。我知道我可以使用反向代理转发到多个端口,但这需要图像使用不同的端口而不是使用相同的端口并让容器转发请求。有没有办法在 k8s 中做到这一点?
apiVersion: v1
kind: Service
metadata:
name: backend
spec:
loadBalancerIP: xxx.xxx.xxx.xxx
selector:
app: app
tier: backend
ports:
- protocol: "TCP"
port: 80
targetPort: 80
type: LoadBalancer
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
spec:
selector:
matchLabels:
app: app
tier: backend
track: stable
replicas: 1
template:
metadata:
labels:
app: app
tier: backend
track: stable
spec:
containers:
- name: app
image: image:example
ports:
- containerPort: 80
imagePullSecrets:
- name: xxxxxxx
理想情况下,我可以让节点上的容器监听不同的端口,这些容器中的应用程序 运行 继续监听 80/443,我的服务将路由到正确的端口根据需要使用容器。
我的负载均衡器工作正常,我的第一个容器也是如此。添加第二个容器成功,但无法访问第二个容器。第二个容器使用不同名称和不同图像的类似脚本进行部署。
这里的答案是为声明端口的 pod 添加服务。使用 Kompose 转换 docker-compose 文件,结果如下:
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: pathToKompose.exe convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: app
name: app
spec:
ports:
- name: "5000"
port: 5000
targetPort: 80
selector:
io.kompose.service: app
status:
loadBalancer: {}
以及
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: pathToKompose.exe convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: app
name: app
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: app
strategy: {}
template:
metadata:
annotations:
kompose.cmd: pathToKompose.exe convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: app
spec:
containers:
- image: image:example
imagePullPolicy: ""
name: app
ports:
- containerPort: 80
resources: {}
restartPolicy: Always
serviceAccountName: ""
volumes: null
status: {}
可以删除 Kompose 中的一些绒毛,但这个问题的相关答案是在服务中声明 pod 的端口和目标端口,并在容器的部署中将 targetPort 公开为 containerPort。
感谢 David Maze 和 GintsGints 的帮助!
我在设置我的 k8s pods 时遇到了问题。我的麻烦是我有多个容器监听相同的端口 (80,443)。在远程机器上,我通常使用 docker-compose 和 'ports - 12345:80' 来设置它。对于 K8s,从我发现的所有示例来看,对于容器,唯一的选择是公开一个端口,而不是代理它。我知道我可以使用反向代理转发到多个端口,但这需要图像使用不同的端口而不是使用相同的端口并让容器转发请求。有没有办法在 k8s 中做到这一点?
apiVersion: v1
kind: Service
metadata:
name: backend
spec:
loadBalancerIP: xxx.xxx.xxx.xxx
selector:
app: app
tier: backend
ports:
- protocol: "TCP"
port: 80
targetPort: 80
type: LoadBalancer
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
spec:
selector:
matchLabels:
app: app
tier: backend
track: stable
replicas: 1
template:
metadata:
labels:
app: app
tier: backend
track: stable
spec:
containers:
- name: app
image: image:example
ports:
- containerPort: 80
imagePullSecrets:
- name: xxxxxxx
理想情况下,我可以让节点上的容器监听不同的端口,这些容器中的应用程序 运行 继续监听 80/443,我的服务将路由到正确的端口根据需要使用容器。
我的负载均衡器工作正常,我的第一个容器也是如此。添加第二个容器成功,但无法访问第二个容器。第二个容器使用不同名称和不同图像的类似脚本进行部署。
这里的答案是为声明端口的 pod 添加服务。使用 Kompose 转换 docker-compose 文件,结果如下:
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: pathToKompose.exe convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: app
name: app
spec:
ports:
- name: "5000"
port: 5000
targetPort: 80
selector:
io.kompose.service: app
status:
loadBalancer: {}
以及
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: pathToKompose.exe convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: app
name: app
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: app
strategy: {}
template:
metadata:
annotations:
kompose.cmd: pathToKompose.exe convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: app
spec:
containers:
- image: image:example
imagePullPolicy: ""
name: app
ports:
- containerPort: 80
resources: {}
restartPolicy: Always
serviceAccountName: ""
volumes: null
status: {}
可以删除 Kompose 中的一些绒毛,但这个问题的相关答案是在服务中声明 pod 的端口和目标端口,并在容器的部署中将 targetPort 公开为 containerPort。 感谢 David Maze 和 GintsGints 的帮助!