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
EOFkubectl 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
EOFcat <<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
EOFcat <<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
EOFkubectl 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