1

I have a Deployment with 5 replicas. All have ssh and telnet. They should not be load balanced. I would like each to select from a predictable list of 5.

Here is my Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  selector:
    matchLabels:
      app: myapp
  replicas: 5
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:1.0
        ports:
        - name: ssh
          protocol: TCP
          containerPort: 22
        - name: telnet
          protocol: TCP
          containerPort: 23

This is my Service with invalid nodePort values for illustrative purposes.

apiVersion: v1
kind: Service
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  type: NodePort
  ports:
  - name: ssh
    port: 22
    nodePort: [30022, 30122, 30222, 30322, 30422, 30522]
  - name: telnet
    port: 23
    nodePort: [30023, 30123, 30223, 30323, 30423, 30523]

I am hoping to be able to accomplish 2 things:

  1. Each pod replica instance will only get an ssh port from [30022, 30122, 30222, 30322, 30422, 30522] and a telnet port from [30023, 30123, 30223, 30323, 30423, 30523]
  2. A pod replica instance that gets an ssh port of 30022 also gets the telnet port 30023. A pod replica instance that gets an ssh port of 30122 gets a telnet port of 30123 and so on.

Thank you!

1

As far as I understand kubernetes services, that trick is not possible.

What could help you to have preserved hostnames is a StatefulSet. See more here

The Pods’ ordinals, hostnames, SRV records, and A record names have not changed, but the IP addresses associated with the Pods may have changed. In the cluster used for this tutorial, they have. This is why it is important not to configure other applications to connect to Pods in a StatefulSet by IP address.

1
  • Thanks! I ended up with StatefulSet with replicas and a multiple services looking for the predictable pod name of each replica: myapp-0, myapp-1, myapp-2, etc
    – Geoff
    Aug 19 '19 at 21:17
0

If the pods (quote) "...should not be load balanced", each pod is to be accessed on different NodePort ports, the order of starting them up doesn't matter...you can:

  • Create 5 identical Deployment-s, say, myapp-1 thru myapp-5, with 1 replica each.
  • Create a Service for each Deployment making sure the selector is correct for each myapp-1 thru myapp-5 Deployment-s. Configure each Service with the concrete nodePort-s for ssh and telnet as you wish.

It is to note that this way each pod will be independent of the rest and pods cannot be scaled by simply adding a replica. Still, if configured, the pods will be rescheduled and restarted in case of pod or node failure.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.