Добавить домен к именам хостов контейнера в Kubernetes StatefulSet

Добавить домен к именам хостов контейнера в Kubernetes StatefulSet

Я создал Kubernetes StatefulSet. В StatefulSet есть три pod'а с именами mysql-0, mysql-1, и mysql-2каждый с одним контейнером.

Если я "вожу" контейнер в pod mysql-1и печатаю, hostnameя получаю ответ mysql-1. Однако то, что яхотетьчтобы контейнер думал, что его имя хоста — mysql-1.example.com. Другими словами, принудительно добавить домен к имени хоста.

Как заставить StatefulSet это сделать?

решение1

Согласноhttp://man7.org/linux/man-pages/man7/hostname.7.html:

Допустимые символы для имен хостов: буквы ASCII(7) от a до z, цифры от 0 до 9 и дефис (-). Имя хоста не может начинаться с дефиса.

Вышесказанное также справедливо для поддоменов. Вот регулярное выражение, используемое для проверки:[a-z0-9]([-a-z0-9]*[a-z0-9])?

Однако вы можете использовать поля hostname:и subdomain:в определении модуля, как описаноздесь

ReplicaSet с указанными выше полями будет выглядеть следующим образом:

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"

Это работает так:

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

Вы также можете получить доменное имя DNS, добавив опцию -d, или имя FQDN, используя -fопцию. Это даст доменные имена K8s для ваших pods, как описаноздесь.

Вы также можете внедрить переменную окружения в модуль и поместить туда свою информацию, как я сделал в примере выше.

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

Связанный контент