Підтримка подвійного стека за допомогою kubeadm

СТАН ФУНКЦІОНАЛУ: Kubernetes v1.23 [stable]

Ваш кластер Kubernetes має мережу з підтримкою подвійного стека, що означає, що у кластері мережева взаємодія може використовувати обидві адресні родини. У кластері панель управління може призначити як IPv4-адреси, так і IPv6-адреси Podʼу чи Service.

Перш ніж ви розпочнете

Вам потрібно встановити інструмент kubeadm, дотримуючись кроків з Встановлення kubeadm.

Для кожного сервера, який ви хочете використовувати як вузол, переконайтеся, що на ньому увімкнено переспрямовування IPv6 трафіку (IPv6 forwarding).

Увімкнення переспрямовування пакетів IPv6

Для перевірки чи увімкнено переспрямовування пакетів IPv6, виконайте наступну команду:

sysctl net.ipv6.conf.all.forwarding

Якщо ви бачите net.ipv6.conf.all.forwarding = 1, це означає, що переспрямовування пакетів IPv6 увімкнено. В іншому випадку переспрямовування пакетів ще не увімкнено.

Ввімкніть його вручну:

# параметри sysctl, необхідні для встановлення, параметри зберігаються при перезавантаженні
cat <<EOF | sudo tee -a /etc/sysctl.d/k8s.conf
net.ipv6.conf.all.forwarding = 1
EOF

# Застосування параметрів sysctl без перезавантаження
sudo sysctl --system

Вам потрібні діапазони адрес IPv4 та IPv6. Оператори кластера, як правило, використовують приватні діапазони адрес для IPv4. Щодо IPv6, оператор кластера, як правило, обирає глобальний унікальний блок адрес з області 2000::/3, використовуючи діапазон, який виділений оператору. Вам не потрібно робити маршрутизацію IP-діапазонів кластера в Інтернет.

Розмір діапазону IP-адрес повинен бути достатнім для тієї кількості Podʼів та Serviceʼів, які ви плануєте запускати.

Створення кластера з подвійним стеком

Для створення кластера з подвійним стеком за допомогою kubeadm init ви можете передати аргументи командного рядка аналогічно наступному прикладу:

# Це діапазони адрес для прикладу
kubeadm init --pod-network-cidr=10.244.0.0/16,2001:db8:42:0::/56 --service-cidr=10.96.0.0/16,2001:db8:42:1::/112

Щоб зробити це більш зрозумілим, ось приклад конфігураційного файлу kubeadm kubeadm-config.yaml для основного вузла панелі управління з подвійним стеком.

---
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
networking:
  podSubnet: 10.244.0.0/16,2001:db8:42:0::/56
  serviceSubnet: 10.96.0.0/16,2001:db8:42:1::/112
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: "10.100.0.1"
  bindPort: 6443
nodeRegistration:
  kubeletExtraArgs:
  - name: "node-ip"
    value: "10.100.0.2,fd00:1:2:3::2"

advertiseAddress в InitConfiguration вказує IP-адресу, яку API Server оголошує як адресу, на якій він очікує трафік. Значення advertiseAddress дорівнює значенню прапорця --apiserver-advertise-address команди kubeadm init.

Використовуйте kubeadm для ініціалізації панелі управління на вузлі з подвійним стеком:

kubeadm init --config=kubeadm-config.yaml

Прапори kube-controller-manager --node-cidr-mask-size-ipv4|--node-cidr-mask-size-ipv6 встановлені у стандартні значення. Див. налаштування подвійного стека IPv4/IPv6.

Приєднання вузла до кластера з подвійним стеком

Перш ніж приєднати вузол, переконайтеся, що вузол має мережевий інтерфейс з можливістю маршрутизації IPv6 та дозволяє пересилання IPv6.

Ось приклад конфігураційного файлу kubeadm kubeadm-config.yaml для приєднання робочого вузла до кластера.

apiVersion: kubeadm.k8s.io/v1beta4
kind: JoinConfiguration
discovery:
  bootstrapToken:
    apiServerEndpoint: 10.100.0.1:6443
    token: "clvldh.vjjwg16ucnhp94qr"
    caCertHashes:
    - "sha256:a4863cde706cfc580a439f842cc65d5ef112b7b2be31628513a9881cf0d9fe0e"
    # змініть інформацію про автентифікацію вище, щоб відповідати фактичному токену та хешу сертифіката CA для вашого кластера
nodeRegistration:
  kubeletExtraArgs:
  - name: "node-ip"
    value: "10.100.0.2,fd00:1:2:3::3"

Також ось приклад конфігураційного файлу kubeadm kubeadm-config.yaml для приєднання іншого вузла панелі управління до кластера.

apiVersion: kubeadm.k8s.io/v1beta4
kind: JoinConfiguration
controlPlane:
  localAPIEndpoint:
    advertiseAddress: "10.100.0.2"
    bindPort: 6443
discovery:
  bootstrapToken:
    apiServerEndpoint: 10.100.0.1:6443
    token: "clvldh.vjjwg16ucnhp94qr"
    caCertHashes:
    - "sha256:a4863cde706cfc580a439f842cc65d5ef112b7b2be31628513a9881cf0d9fe0e"
    # змініть інформацію про автентифікацію вище, щоб відповідати фактичному токену та хешу сертифіката CA для вашого кластера
nodeRegistration:
  kubeletExtraArgs:
  - name: "node-ip"
    value: "10.100.0.2,fd00:1:2:3::4"

advertiseAddress в JoinConfiguration.controlPlane вказує IP-адресу, яку API Server оголошує як адресу, на якій він слухає. Значення advertiseAddress дорівнює прапорцю --apiserver-advertise-address команди kubeadm join.

kubeadm join --config=kubeadm-config.yaml

Створення кластера з одним стеком

Щоб зробити речі більш зрозумілими, конфігураційного файлу kubeadm kubeadm-config.yaml для панелі управління з одним стеком.

apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
networking:
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/16

Що далі

Змінено November 19, 2024 at 1:44 PM PST: sync upstream (8ccffa9e5f)