Kubernetes StatefulSet의 컨테이너 호스트 이름에 도메인 추가

Kubernetes StatefulSet의 컨테이너 호스트 이름에 도메인 추가

Kubernetes StatefulSet을 만들었습니다. StatefulSet에는 이름이 mysql-0, 인 3개의 Pod가 있으며 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:

호스트 이름에 유효한 문자는 a~z의 ASCII(7) 문자, 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 도메인 이름이 생성됩니다.여기.

위의 예에서 했던 것처럼 환경 변수를 포드에 주입하고 거기에 정보를 넣을 수도 있습니다.

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

관련 정보