Anexar domínio a nomes de host de contêiner em um StatefulSet do Kubernetes

Anexar domínio a nomes de host de contêiner em um StatefulSet do Kubernetes

Eu criei um StatefulSet do Kubernetes. Existem três pods no StatefulSet com nomes mysql-0, mysql-1e mysql-2cada um com um único contêiner.

Se eu "logar" no contêiner no pod mysql-1e digitar, hostnamerecebo a resposta mysql-1. Contudo, o que euquereré para o contêiner pensar que seu nome de host é mysql-1.example.com. Em outras palavras, force o nome do host a ter o domínio anexado.

Como faço para que o StatefulSet faça isso acontecer?

Responder1

Conformehttp://man7.org/linux/man-pages/man7/hostname.7.html:

Os caracteres válidos para nomes de host são letras ASCII(7) de a a z, os dígitos de 0 a 9 e o hífen (-). Um nome de host não pode começar com um hífen.

Acima também é válido para subdomínios. Aqui está um regex usado para validação:[a-z0-9]([-a-z0-9]*[a-z0-9])?

No entanto, você pode usar campos hostname:e subdomain:em uma definição de pod, conforme descritoaqui

Um ReplicaSet com os campos acima ficaria assim:

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"

Isso funciona assim:

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

Você também pode recuperar o nome de domínio DNS adicionando a -dopção ou o nome FQDN usando a -fopção. Isso produzirá nomes de domínio K8s para seus pods conforme descritoaqui.

Você também pode injetar variáveis ​​ambientais em um pod e colocar suas informações lá, como fiz no exemplo acima.

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

informação relacionada