How to expose multiple port using a load balancer services in Kubernetes

41,669

You have two options:

  1. You could have multiple services, one for each port. As you pointed out, each service will end up with a different IP address
  2. You could have a single service with multiple ports. In this particular case, you must give all ports a name.

In your case, the service becomes:

apiVersion: v1
kind: Service
metadata:
  name: service-name
spec:
  ports:
  - name: http
    port: 80
    targetPort: 80
  - name: https
    port: 443
    targetPort: 443
  - name: something
    port: 6001
    targetPort: 6001
  selector:
    app: app-label
  type: LoadBalancer

This is necessary so that endpoints can be disambiguated.

Share:
41,669
Sebastien
Author by

Sebastien

Student, learning how to code in my spare time

Updated on July 22, 2020

Comments

  • Sebastien
    Sebastien almost 4 years

    I have created a cluster using the google cloud platform (container engine) and deployed a pod using the following YAML file:

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata: 
      name: deployment-name
    spec:
      replicas: 1
      template:
        metadata:
          name: pod-name
          labels: 
            app: app-label
        spec:
          containers: 
          - name: container-name
          image: gcr.io/project-id/image-name
          resources:
            requests:
              cpu: 1
          ports:
          - name: port80
            containerPort: 80
          - name: port443
            containerPort: 443
          - name: port6001
            containerPort: 6001
    

    Then I want to create a service that enables the pod to listen on all these ports. I know that the following YAML file works to create a service that listens on one port:

    apiVersion: v1
    kind: Service
    metadata: 
      name: service-name
    spec:    
      ports:
      - port: 80
        targetPort: 80
      selector: 
        app: app-label
      type: LoadBalancer
    

    However when I want the pod to listen on multiple ports like this, it doesn't work:

    apiVersion: v1
    kind: Service
    metadata: 
      name: service-name
    spec:    
      ports:
      - port: 80
        targetPort: 80
      - port: 443
        targetPort: 443
      - port: 6001
        targetPort: 6001
      selector: 
        app: app-label
      type: LoadBalancer
    

    How can I make my pod listen to multiple ports?