# Подвійний стек IPv4/IPv6

> Kubernetes дозволяє налаштувати мережеве зʼєднання з одним стеком IPv4, з одним стеком IPv6 або з подвійним стеком з обома сімействами мереж. Ця сторінка пояснює, як це зробити.

---

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->








  <div class="feature-state-notice feature-stable">
      <span class="feature-state-name">СТАН ФУНКЦІОНАЛУ:</span>
      <code>Kubernetes v1.23 [stable]</code>
    </div>
  



Двостекова мережа IPv4/IPv6 дозволяє виділяти як адреси IPv4, так і IPv6 для
<a class='glossary-tooltip' title='Pod є групою контейнерів, що запущені у вашому кластері.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/workloads/pods/' target='_blank' aria-label='Podʼів'>Podʼів</a> та <a class='glossary-tooltip' title='Спосіб відкрити доступ до застосунку, що запущений на декількох Podʼах у вигляді мережевої служби.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/services-networking/service/' target='_blank' aria-label='Serviceʼів'>Serviceʼів</a>.

Двостекова мережа IPv4/IPv6 є стандартно увімкненою у вашому кластері Kubernetes починаючи з версії 1.21, що дозволяє одночасно призначати адреси як IPv4, так і IPv6.

<!-- body -->

## Підтримувані функції {#supported-features}

Двостекова мережа IPv4/IPv6 у вашому кластері Kubernetes надає наступні можливості:

* Мережа Pod із двома стеками (призначення адреси IPv4 і IPv6 на один Pod)
* Serviceʼи з підтримкою IPv4 і IPv6
* Маршрутизація egress Pod за межі кластера (наприклад, в Інтернет) через інтерфейси IPv4 та IPv6

## Передумови {#prerequisites}

Для використання двостекових кластерів Kubernetes IPv4/IPv6 потрібні наступні передумови:

* Kubernetes 1.20 або новіше

  Для отримання інформації щодо використання двостекових Serviceʼів із попередніми версіями Kubernetes, дивіться документацію для відповідної версії Kubernetes.

* Підтримка постачальником двостекової мережі (постачальник хмари або інший повинен забезпечити вузлам Kubernetes маршрутизовані мережеві інтерфейси IPv4/IPv6)
* [Мережевий втулок](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/), який підтримує двостекову мережу.

## Налаштування двостекової мережі IPv4/IPv6 {#configure-ipv4-ipv6-dual-stack}

Щоб налаштувати подвійний стек IPv4/IPv6, встановіть призначення мережі кластера з подвійним стеком:

* kube-apiserver:
  * `--service-cluster-ip-range=<CIDR IPv4>,<CIDR IPv6>`
* kube-controller-manager:
  * `--cluster-cidr=<CIDR IPv4>,<CIDR IPv6>`
  * `--service-cluster-ip-range=<CIDR IPv4>,<CIDR IPv6>`
  * `--node-cidr-mask-size-ipv4|--node-cidr-mask-size-ipv6` типово /24 для IPv4 та /64 для IPv6
* kube-proxy:
  * `--cluster-cidr=<CIDR IPv4>,<CIDR IPv6>`
* kubelet:
  * `--node-ip=<IP IPv4>,<IP IPv6>`
    * Ця опція є обовʼязковою для bare metal двостекових вузлів (вузлів, які не визначають постачальника хмари прапорцем `--cloud-provider`). Якщо ви використовуєте постачальника хмари та вирішили перевизначити IP-адреси вузлів, визначені постачальником хмари, встановіть опцію `--node-ip`.
    * (Вбудовані застарілі постачальники хмари не підтримують двостековий параметр `--node-ip`.)


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4><p>Приклад CIDR IPv4: <code>10.244.0.0/16</code> (хоча ви повинні вказати свій власний діапазон адрес)</p>
<p>Приклад CIDR IPv6: <code>fdXY:IJKL:MNOP:15::/64</code> (це показує формат, але не є дійсною адресою — дивіться <a href="https://tools.ietf.org/html/rfc4193">RFC 4193</a>)</p>
</div>


## Serviceʼи {#services}

Ви можете створювати <a class='glossary-tooltip' title='Спосіб відкрити доступ до застосунку, що запущений на декількох Podʼах у вигляді мережевої служби.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/services-networking/service/' target='_blank' aria-label='Serviceʼи'>Serviceʼи</a>, які можуть використовувати адреси IPv4, IPv6 або обидві.

Сімейство адрес Service типово відповідає сімейству адрес першого діапазону IP Service кластера (налаштованого через прапорець `--service-cluster-ip-range` у kube-apiserver).

При визначенні Service ви можете конфігурувати його як двостековий за власним бажанням. Щоб вказати потрібну поведінку, ви встановлюєте в поле `.spec.ipFamilyPolicy` одне з наступних значень:

* `SingleStack`: Service з одним стеком. Панель управління виділяє IP кластера для Service, використовуючи перший налаштований діапазон IP кластера для Service.
* `PreferDualStack`: Виділяє IP-адреси кластерів IPv4 та IPv6 для Service, коли ввімкнено подвійний стек. Якщо подвійний стек не ввімкнено або не підтримується, він повертається до одностекового режиму.
* `RequireDualStack`: Виділяє IP-адреси Service `.spec.clusterIP` з діапазонів адрес IPv4 та IPv6, якщо увімкнено подвійний стек. Якщо подвійний стек не ввімкнено або не підтримується, створення обʼєкта Service API завершиться невдачею.
  * Вибирає `.spec.clusterIP` зі списку `.spec.clusterIPs` на основі сімейства адрес першого елемента у масиві `.spec.ipFamilies`.

Якщо ви хочете визначити, яке сімейство IP використовувати для одностекової конфігурації або визначити порядок IP для двостекової, ви можете вибрати сімейства адрес, встановивши необовʼязкове поле `.spec.ipFamilies` в Service.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>Поле <code>.spec.ipFamilies</code> умовно змінюване: ви можете додавати або видаляти вторинне
сімейство IP-адрес, але не можете змінювати основне сімейство IP-адрес наявного Service.</div>


Ви можете встановити `.spec.ipFamilies` в будь-яке з наступних значень масиву:

* `["IPv4"]`
* `["IPv6"]`
* `["IPv4","IPv6"]` (два стеки)
* `["IPv6","IPv4"]` (два стеки)

Перше сімейство, яке ви перераховуєте, використовується для легасі-поля `.spec.clusterIP`.

### Сценарії конфігурації двостекового Service {#dual-stack-service-configuration-scenarios}

Ці приклади демонструють поведінку різних сценаріїв конфігурації двостекового Service.

#### Параметри подвійного стека в нових Service {#dual-stack-options-on-new-services}

1. Специфікація цього Service явно не визначає `.spec.ipFamilyPolicy`. Коли ви створюєте цей Service, Kubernetes виділяє кластерний IP для Service з першого налаштованого `service-cluster-ip-range` та встановлює значення `.spec.ipFamilyPolicy` на `SingleStack`. ([Service без селекторів](/docs/concepts/services-networking/service/#services-without-selectors) та [headless Services](/docs/concepts/services-networking/service/#headless-services) із селекторами будуть працювати так само.)

   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   <div class="highlight code-sample">
       <div class="copy-code-icon">
       <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/uk/examples/service/networking/dual-stack-default-svc.yaml" download="service/networking/dual-stack-default-svc.yaml"><code>service/networking/dual-stack-default-svc.yaml</code>
       </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('service-networking-dual-stack-default-svc-yaml')" title="Копіювати service/networking/dual-stack-default-svc.yaml до буферу обміну"></img></div>
       <div class="includecode" id="service-networking-dual-stack-default-svc-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Service</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">my-service</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">labels</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">app.kubernetes.io/name</span><span class="p">:</span><span class="w"> </span><span class="l">MyApp</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">selector</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">app.kubernetes.io/name</span><span class="p">:</span><span class="w"> </span><span class="l">MyApp</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">ports</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">protocol</span><span class="p">:</span><span class="w"> </span><span class="l">TCP</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">80</span><span class="w">
   </span></span></span></code></pre></div></div>
   </div>

2. Специфікація цього Service явно визначає `PreferDualStack` в `.spec.ipFamilyPolicy`. Коли ви створюєте цей Service у двостековому кластері, Kubernetes призначає як IPv4, так і IPv6 адреси для Service. Панель управління оновлює `.spec` для Service, щоб зафіксувати адреси IP. Поле `.spec.clusterIPs` є основним полем і містить обидві призначені адреси IP; `.spec.clusterIP` є вторинним полем зі значенням, обчисленим з `.spec.clusterIPs`.

   * Для поля `.spec.clusterIP` панель управління записує IP-адресу, яка є з того ж самого сімейства адрес, що й перший діапазон кластерних IP Service.
   * У одностековому кластері поля `.spec.clusterIPs` та `.spec.clusterIP` містять лише одну адресу.
   * У кластері з увімкненими двома стеками вказання `RequireDualStack` в `.spec.ipFamilyPolicy` працює так само як і `PreferDualStack`.

   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   <div class="highlight code-sample">
       <div class="copy-code-icon">
       <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/uk/examples/service/networking/dual-stack-preferred-svc.yaml" download="service/networking/dual-stack-preferred-svc.yaml"><code>service/networking/dual-stack-preferred-svc.yaml</code>
       </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('service-networking-dual-stack-preferred-svc-yaml')" title="Копіювати service/networking/dual-stack-preferred-svc.yaml до буферу обміну"></img></div>
       <div class="includecode" id="service-networking-dual-stack-preferred-svc-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Service</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">my-service</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">labels</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">app.kubernetes.io/name</span><span class="p">:</span><span class="w"> </span><span class="l">MyApp</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">ipFamilyPolicy</span><span class="p">:</span><span class="w"> </span><span class="l">PreferDualStack</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">selector</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">app.kubernetes.io/name</span><span class="p">:</span><span class="w"> </span><span class="l">MyApp</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">ports</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">protocol</span><span class="p">:</span><span class="w"> </span><span class="l">TCP</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">80</span><span class="w">
   </span></span></span></code></pre></div></div>
   </div>

3. Специфікація цього Service явно визначає `IPv6` та `IPv4` в `.spec.ipFamilies`, а також визначає `PreferDualStack` в `.spec.ipFamilyPolicy`. Коли Kubernetes призначає IPv6 та IPv4 адреси в `.spec.clusterIPs`, `.spec.clusterIP` встановлюється на IPv6 адресу, оскільки це перший елемент у масиві `.spec.clusterIPs`, що перевизначає типові значення.

   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   <div class="highlight code-sample">
       <div class="copy-code-icon">
       <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/uk/examples/service/networking/dual-stack-preferred-ipfamilies-svc.yaml" download="service/networking/dual-stack-preferred-ipfamilies-svc.yaml"><code>service/networking/dual-stack-preferred-ipfamilies-svc.yaml</code>
       </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('service-networking-dual-stack-preferred-ipfamilies-svc-yaml')" title="Копіювати service/networking/dual-stack-preferred-ipfamilies-svc.yaml до буферу обміну"></img></div>
       <div class="includecode" id="service-networking-dual-stack-preferred-ipfamilies-svc-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Service</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">my-service</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">labels</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">app.kubernetes.io/name</span><span class="p">:</span><span class="w"> </span><span class="l">MyApp</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">ipFamilyPolicy</span><span class="p">:</span><span class="w"> </span><span class="l">PreferDualStack</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">ipFamilies</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">IPv6</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">IPv4</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">selector</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">app.kubernetes.io/name</span><span class="p">:</span><span class="w"> </span><span class="l">MyApp</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">ports</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">protocol</span><span class="p">:</span><span class="w"> </span><span class="l">TCP</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">80</span><span class="w">
   </span></span></span></code></pre></div></div>
   </div>

#### Параметри подвійного стека в наявних Service {#dual-stack-details-on-existing-services}

Ці приклади демонструють типову поведінку при увімкненні двостековості в кластері, де вже існують Service. (Оновлення наявного кластера до версії 1.21 або новіше вмикає двостековість.)

1. Коли двостековість увімкнена в кластері, наявні Service (безперебійно `IPv4` або `IPv6`) конфігуруються панеллю управління так, щоб встановити `.spec.ipFamilyPolicy` на `SingleStack` та встановити `.spec.ipFamilies` на сімейство адрес наявного Service. Кластерний IP наявного Service буде збережено в `.spec.clusterIPs`.

   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   <div class="highlight code-sample">
       <div class="copy-code-icon">
       <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/uk/examples/service/networking/dual-stack-default-svc.yaml" download="service/networking/dual-stack-default-svc.yaml"><code>service/networking/dual-stack-default-svc.yaml</code>
       </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('service-networking-dual-stack-default-svc-yaml')" title="Копіювати service/networking/dual-stack-default-svc.yaml до буферу обміну"></img></div>
       <div class="includecode" id="service-networking-dual-stack-default-svc-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Service</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">my-service</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">labels</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">app.kubernetes.io/name</span><span class="p">:</span><span class="w"> </span><span class="l">MyApp</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">selector</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">app.kubernetes.io/name</span><span class="p">:</span><span class="w"> </span><span class="l">MyApp</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">ports</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">protocol</span><span class="p">:</span><span class="w"> </span><span class="l">TCP</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">80</span><span class="w">
   </span></span></span></code></pre></div></div>
   </div>

   Ви можете перевірити цю поведінку за допомогою kubectl, щоб переглянути наявний Service.

   ```shell
   kubectl get svc my-service -o yaml
   ```

   ```yaml
   apiVersion: v1
   kind: Service
   metadata:
     labels:
       app.kubernetes.io/name: MyApp
     name: my-service
   spec:
     clusterIP: 10.0.197.123
     clusterIPs:
     - 10.0.197.123
     ipFamilies:
     - IPv4
     ipFamilyPolicy: SingleStack
     ports:
     - port: 80
       protocol: TCP
       targetPort: 80
     selector:
       app.kubernetes.io/name: MyApp
     type: ClusterIP
   status:
     loadBalancer: {}
   ```

2. Коли двостековість увімкнена в кластері, наявні [headless Services](/docs/concepts/services-networking/service/#headless-services) з селекторами конфігуруються панеллю управління так, щоб встановити `.spec.ipFamilyPolicy` на `SingleStack` та встановити `.spec.ipFamilies` на сімейство адрес першого діапазону кластерних IP Service (налаштованого за допомогою прапорця `--service-cluster-ip-range` для kube-apiserver), навіть якщо `.spec.clusterIP` встановлено в `None`.

   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   <div class="highlight code-sample">
       <div class="copy-code-icon">
       <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/uk/examples/service/networking/dual-stack-default-svc.yaml" download="service/networking/dual-stack-default-svc.yaml"><code>service/networking/dual-stack-default-svc.yaml</code>
       </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('service-networking-dual-stack-default-svc-yaml')" title="Копіювати service/networking/dual-stack-default-svc.yaml до буферу обміну"></img></div>
       <div class="includecode" id="service-networking-dual-stack-default-svc-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Service</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">my-service</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">labels</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">app.kubernetes.io/name</span><span class="p">:</span><span class="w"> </span><span class="l">MyApp</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">selector</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">app.kubernetes.io/name</span><span class="p">:</span><span class="w"> </span><span class="l">MyApp</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">ports</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">protocol</span><span class="p">:</span><span class="w"> </span><span class="l">TCP</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">80</span><span class="w">
   </span></span></span></code></pre></div></div>
   </div>

   Ви можете перевірити цю поведінку за допомогою kubectl, щоб переглянути наявний headless Service з селекторами.

   ```shell
   kubectl get svc my-service -o yaml
   ```

   ```yaml
   apiVersion: v1
   kind: Service
   metadata:
     labels:
       app.kubernetes.io/name: MyApp
     name: my-service
   spec:
     clusterIP: None
     clusterIPs:
     - None
     ipFamilies:
     - IPv4
     ipFamilyPolicy: SingleStack
     ports:
     - port: 80
       protocol: TCP
       targetPort: 80
     selector:
       app.kubernetes.io/name: MyApp
   ```

#### Перемикання Service між одностековим та двостековим режимами {#switching-services-between-single-stack-and-dual-stack}

Service можна перемикати з одностекового режиму на двостековий та навпаки.

1. Для того щоби перемикнути Service з одностекового режиму на двостековий, змініть `.spec.ipFamilyPolicy` з `SingleStack` на `PreferDualStack` або `RequireDualStack` за необхідності. Коли ви змінюєте цей Service з одностекового режиму на двостековий, Kubernetes призначає відсутнє адресне сімейство, так що тепер Service має адреси IPv4 та IPv6.

   Відредагуйте специфікацію Service, оновивши `.spec.ipFamilyPolicy` з `SingleStack` на `PreferDualStack`.

   До:

   ```yaml
   spec:
     ipFamilyPolicy: SingleStack
   ```

   Після:

   ```yaml
   spec:
     ipFamilyPolicy: PreferDualStack
   ```

2. Для того щоби змінити Service з двостекового режиму на одностековий, змініть `.spec.ipFamilyPolicy` з `PreferDualStack` або `RequireDualStack` на `SingleStack`. Коли ви змінюєте цей Service з двостекового режиму на одностековий, Kubernetes залишає лише перший елемент у масиві `.spec.clusterIPs`, і встановлює `.spec.clusterIP` на цю IP-адресу і встановлює `.spec.ipFamilies` на адресне сімейство `.spec.clusterIPs`.

### Headless Services без селекторів {#headless-services-without-selectors}

Для [Headless Services без селекторів](/docs/concepts/services-networking/service/#without-selectors) і без явно вказаного `.spec.ipFamilyPolicy`, поле `.spec.ipFamilyPolicy` має типове значення `RequireDualStack`.

### Тип Service — LoadBalancer {#service-type-loadbalancer}

Щоб налаштувати двостековий балансувальник навантаження для вашого Service:

* Встановіть значення поля `.spec.type` в `LoadBalancer`
* Встановіть значення поля `.spec.ipFamilyPolicy` в `PreferDualStack` або `RequireDualStack`


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>Для використання двостекового Service типу <code>LoadBalancer</code>, ваш постачальник хмари повинен підтримувати балансувальники навантаження IPv4 та IPv6.</div>


## Трафік Egress {#egress-traffic}

Якщо ви хочете увімкнути трафік Egress, щоб досягти призначення за межами кластера (наприклад, публічний Інтернет) з Podʼа, який використовує непублічно марковані адреси IPv6, вам потрібно увімкнути Pod для використання публічно-маршрутизованих адрес IPv6 за допомогою механізму, такого як прозорий проксі або IP маскування. Проєкт [ip-masq-agent](https://github.com/kubernetes-sigs/ip-masq-agent) підтримує IP-маскування у двостекових кластерах.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>Переконайтеся, що ваш постачальник <a class='glossary-tooltip' title='Втулки мережевого інтерфейсу контейнера (CNI) є типом мережевих втулків, які відповідають специфікації appc/CNI.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/' target='_blank' aria-label='CNI'>CNI</a> підтримує IPv6.</div>


## Підтримка Windows {#windows-support}

Kubernetes на Windows не підтримує одностекову мережу "лише IPv6". Однак
підтримується двостекова мережа IPv4/IPv6 для Podʼів та вузлів з одностековими Service.

Ви можете використовувати двостекову мережу IPv4/IPv6 з мережами `l2bridge`.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>Мережі VXLAN на Windows <strong>не</strong> підтримують двостекову мережу.</div>


Ви можете дізнатися більше про різні режими мережі для Windows в розділі [Мережа у Windows](/docs/concepts/services-networking/windows-networking#network-modes).

## Що далі

* [Перевірте двостекову мережу IPv4/IPv6](/docs/tasks/network/validate-dual-stack)
* [Увімкніть двостекову мережу за допомогою kubeadm](/docs/setup/production-environment/tools/kubeadm/dual-stack-support/)
