Pod hostname, subdomain
При создании пода, в hostname контейнера прописывается имя пода. Но не всегда это удобно. Название пода может подчиняться одной политике, а hostname другой. Поэтому при создании пода есть возможность указать hostname напрямую.
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: pod-hostname1 namespace: default spec: containers: - name: pod-hostnamebb image: nginx:latest imagePullPolicy: IfNotPresent restartPolicy: Always EOF
И посмотрим что у него в hostname.
kubectl exec --tty --stdin pod-hostname1 — /bin/bash hostname pod-hostname1
Имя точно такое же, как и у пода.
Во втором примере укажем кастомный hostname.
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: pod-hostname2 namespace: default spec: containers: - name: pod-hostnamedd image: nginx:latest imagePullPolicy: IfNotPresent restartPolicy: Always hostname: mynginx EOF
kubectl exec --tty --stdin pod-hostname2 — /bin/bash hostname mynginx
В выводе hostname то имя, которое мы ему передали.
К подам и сервисам можно обратиться с помощью FQDN.
Стандартная схема записи у пода: "hostname.namespace.pod.cluster.local"
С использованием сабдомена: "hostname.subdmain.namespace.pod.cluster.local"
Стандартная схема записи у сервиса: "hostname.namespace.svc.cluster.local"
С использованием сабдомена: "hostname.subdmain.namespace.svc.cluster.local"
Сабдомен позволяет разграничить поды с помощью FQDN.
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: cam-nginx namespace: default labels: app: nginx spec: containers: - name: nginx image: nginx:latest imagePullPolicy: IfNotPresent restartPolicy: Always hostname: mynginx subdomain: web EOF
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: cam-redis namespace: default labels: app: redis spec: containers: - name: redis image: redis:latest imagePullPolicy: IfNotPresent restartPolicy: Always hostname: myredis subdomain: db EOF
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: cam-redis2 namespace: default labels: app: redis spec: containers: - name: redis2 image: redis:latest imagePullPolicy: IfNotPresent restartPolicy: Always hostname: myredis2 EOF
kubectl exec --tty --stdin cam-nginx -- /bin/bash
cat /etc/hosts # Kubernetes-managed hosts file. 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet fe00::0 ip6-mcastprefix fe00::1 ip6-allnodes fe00::2 ip6-allrouters 10.11.0.22 mynginx.web.default.svc.cluster.local mynginx
kubectl exec --tty --stdin cam-redis -- /bin/bash
cat /etc/hosts # Kubernetes-managed hosts file. 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet fe00::0 ip6-mcastprefix fe00::1 ip6-allnodes fe00::2 ip6-allrouters 10.11.0.155 myredis.db.default.svc.cluster.local myredis
#В этом поде не был указан сабдомен kubectl exec --tty --stdin cam-redis2 -- /bin/bash
cat /etc/hosts # Kubernetes-managed hosts file. 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet fe00::0 ip6-mcastprefix fe00::1 ip6-allnodes fe00::2 ip6-allrouters 10.11.0.48 myredis2