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

14

我正在尝试创建一个包含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

这适用于单个容器,我可以从rest客户端访问服务。但是当我使用2个容器时,我只能访问一个容器。如何才能访问两个容器?此外,如果有人能指导一下使用一个包含一个镜像的pod与一个包含多个镜像的pod的优缺点,那就太好了!


我遇到了同样的情况,你有找到解决方法吗?怎么做的? - Nag
2个回答

13

您有多种选择:

  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
    

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

来源

何时使用多容器 Pod: Pod 是一个或多个容器、这些容器的共享存储以及有关如何运行容器的选项所组成的一组。Pod 总是 共存 并且 共调度,并在共享上下文中运行。Pod 模拟了一个应用程序特定的“逻辑主机” - 它包含一个或多个应用程序容器,这些容器相对紧密耦合 —— 在一个容器之前的世界中,它们会在同一台物理或虚拟机上执行。

enter image description here


我可以知道porttarget port是指什么吗?@Farhad - AATHITH RAJENDRAN
1
@AATHITHRAJENDRAN port是服务中的传入流量端口,而targetPort是暴露的pod中的端口,可以是字符串(端口名称)。 - Farhad Farahi

3
您可以在命令行中执行此操作:

您可以在命令行中实现此操作:

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

只需用逗号设置端口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接