Agregar dominio a los nombres de host del contenedor en un StatefulSet de Kubernetes

Agregar dominio a los nombres de host del contenedor en un StatefulSet de Kubernetes

He creado un StatefulSet de Kubernetes. Hay tres pods en StatefulSet con nombres mysql-0, mysql-1y mysql-2cada uno con un único contenedor.

Si "inicio sesión" en el contenedor en el pod mysql-1y escribo, hostnameobtengo la respuesta mysql-1. Sin embargo, lo que yodeseares que el contenedor piense que su nombre de host es mysql-1.example.com. En otras palabras, fuerce que se agregue el dominio al nombre de host.

¿Cómo consigo que StatefulSet haga que esto suceda?

Respuesta1

segúnhttp://man7.org/linux/man-pages/man7/hostname.7.html:

Los caracteres válidos para los nombres de host son las letras ASCII(7) de la a a la z, los dígitos del 0 al 9 y el guión (-). Un nombre de host no puede comenzar con un guión.

Lo anterior también es válido para los subdominios. Aquí hay una expresión regular utilizada para la validación:[a-z0-9]([-a-z0-9]*[a-z0-9])?

Sin embargo, puede utilizar los campos hostname:y subdomain:en una definición de pod, como se describeaquí

Un ReplicaSet con los campos anteriores se vería así:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: test-replica-set
  labels:
    app: guestbook
    tier: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      hostname: my-hostname
      subdomain: my-subdomain
      containers:
      - image: busybox:1.28
        command:
          - sleep
          - "3600"
        name: busybox1
        env:
        - name: HOSTNAME
          value: "whathever.domain.com"

Esto funciona así:

> kubectl exec test-replica-set-pz2kk -it -- hostname
my-hostname

También puede recuperar el nombre de dominio DNS agregando la -dopción, o el nombre FQDN usando la -fopción. Esto generará nombres de dominio K8 para sus pods como se describeaquí.

También puedes inyectar una variable ambiental en un pod y poner tu información allí, como hice en el ejemplo anterior.

> kubectl exec test-replica-set-pz2kk -it -- sh
/ # echo $HOSTNAME
whathever.domain.com

información relacionada