Anhängen einer Domäne an Container-Hostnamen in einem Kubernetes StatefulSet

Anhängen einer Domäne an Container-Hostnamen in einem Kubernetes StatefulSet

Ich habe ein Kubernetes StatefulSet erstellt. Es gibt drei Pods im StatefulSet mit den Namen mysql-0, mysql-1und mysql-2jeweils mit einem einzelnen Container.

Wenn ich mich beim Container im Pod anmelde mysql-1und eingebe, hostnameerhalte ich die Antwort mysql-1. Was ich jedochwollenbedeutet, dass der Container denkt, sein Hostname sei mysql-1.example.com. Mit anderen Worten: Erzwingen Sie, dass die Domäne an den Hostnamen angehängt wird.

Wie erhalte ich das StatefulSet, um dies zu ermöglichen?

Antwort1

Gemäßhttp://man7.org/linux/man-pages/man7/hostname.7.html:

Gültige Zeichen für Hostnamen sind ASCII(7)-Buchstaben von a bis z, die Ziffern von 0 bis 9 und der Bindestrich (-). Ein Hostname darf nicht mit einem Bindestrich beginnen.

Das oben Gesagte gilt auch für Subdomains. Hier ist ein regulärer Ausdruck, der zur Validierung verwendet wird:[a-z0-9]([-a-z0-9]*[a-z0-9])?

Sie können jedoch hostname:und subdomain:Felder in einer Pod-Definition verwenden, wie beschriebenHier

Ein Replikatsatz mit den oben genannten Feldern würde folgendermaßen aussehen:

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"

Das funktioniert so:

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

Sie können auch den DNS-Domänennamen abrufen, indem Sie die -dOption hinzufügen, oder den FQDN-Namen, indem Sie die -fOption verwenden. Dadurch erhalten Sie K8s-Domänennamen für Ihre Pods, wie beschriebenHier.

Sie können auch Umgebungsvariablen in einen Pod einfügen und Ihre Informationen dort ablegen, wie ich es im obigen Beispiel getan habe.

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

verwandte Informationen