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

<pre class="lang-yaml prettyprint-override"><code>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
</code></pre>
<p>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:</p>
<pre class="lang-yaml prettyprint-override"><code>apiVersion: v1
kind: Service
metadata: 
  name: service-name
spec:    
  ports:
  - port: 80
    targetPort: 80
  selector: 
    app: app-label
  type: LoadBalancer
</code></pre>
<p>However when I want the pod to listen on multiple ports like this, it doesn't work:</p>
<pre class="lang-yaml prettyprint-override"><code>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
</code></pre>
<p>How can I make my pod listen to multiple ports?</p>

<p>You have two options:</p>

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

<p>In your case, the service becomes:</p>

<pre><code>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
</code></pre>

<p>This is necessary so that endpoints can be disambiguated.</p>
