Kubernetes - How to expose 2 different containers in a pod?

You have multiple Options:

  1. Create multiple services exposing one port each, on the same deployment.

  2. Create single service exposing multiple ports:

    ---
    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. Using kubectl expose:

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

Note that if no port is specified via –port and the exposed resource has multiple ports, all will be re-used by the new service. Also if no labels are specified, the new service will re-use the labels from the resource it exposes.

Source

When to use multi container pods: A pod is a group of one or more containers, the shared storage for those containers, and options about how to run the containers. Pods are always co-located and co-scheduled, and run in a shared context. A pod models an application-specific “logical host” - it contains one or more application containers which are relatively tightly coupled — in a pre-container world, they would have executed on the same physical or virtual machine.

enter image description here


You can actually do this in the command line:

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

Set the ports just by a comma

Tags:

Kubernetes