Kubernetes - 如何在吊舱中暴露2个不同的容器?

时间:2017-02-16 09:47:19

标签: kubernetes

我正在尝试创建一个包含2个容器的容器,每个容器都有不同的图像!我不确定如何将两个不同的容器暴露给客户端。以下是我的部署yaml文件。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: checkdifimage
spec:
  replicas: 1
  template: 
metadata:
  labels:
    app: checkdifimagelab
spec:
  containers:
  - name: checkallcont1
    image: <dockerimage>
    ports:
    - containerPort: 32030
  - name: checkall1cont2
    image: <dockerimage2>
    ports:
    - containerPort: 32031

我正在进行的部署是在部署之后。我运行以下命令来公开服务:

kubectl expose pod checkdifimage --port=8080 --type=NodePort --name=diffimage

这适用于单个容器,并且能够从其他客户端访问该服务。但是当我使用2个容器时,我只能打一个容器。我该怎样继续打两个容器?此外,如果有人可以请指导使用一个具有一个图像的pod与一个具有多个图像的pod有什么优缺点!

2 个答案:

答案 0 :(得分:10)

您有多个选项:

  1. 在同一部署中创建多个服务,每个服务公开一个端口。

  2. 创建公开多个端口的单个服务:

    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: my-service
    spec:
      selector:
        app: MyApp
      ports:
      - name: http
        protocol: TCP
        port: 80
        targetPort: 9376
      - name: https
        protocol: TCP
        port: 443
        targetPort: 9377
    
  3. 使用kubectl expose:

    kubectl expose service nginx --port=443 --target-port=8443 --name=nginx-https
    
  4.   

    请注意,如果没有通过-port指定端口,并且公开的资源有多个端口,则新服务将重新使用所有端口。此外,如果未指定标签,则新服务将重新使用其公开的资源中的标签。

    Source

    何时使用多容器容器: pod是一组一个或多个容器,这些容器的共享存储以及有关如何运行容器的选项。 Pod总是共处共同安排,并在共享上下文中运行。一个pod模拟特定于应用程序的“逻辑主机” - 它包含一个或多个相对紧密耦合的应用程序容器 - 在预容器世界中,它们将在同一物理或虚拟机上执行

    enter image description here

答案 1 :(得分:2)

您实际上可以在命令行中执行此操作:

kubectl expose deployment xxx --port=8080,18000 --type=NodePort

仅使用逗号

设置端口