# Виділення IP-адрес ClusterIP Serviceʼам

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

---

<!-- overview -->

У Kubernetes [Service](/docs/concepts/services-networking/service/) — це абстракція для експозиції застосунку, який працює на наборі Podʼів. Serviceʼи можуть мати віртуальну IP-адресу, доступну на рівні кластера (за допомогою Service з `type: ClusterIP`). Клієнти можуть підключатися за допомогою цієї віртуальної IP-адреси, і Kubernetes балансує трафік до цього Service між його Podʼами.

<!-- body -->

## Як виділяються IP-адреси ClusterIP Сервісу? {#how-service-clusterips-are-allocated}

Коли Kubernetes потрібно призначити віртуальну IP-адресу для Service, це відбувається одним із двох способів:

_динамічно_
: панель управління кластера автоматично вибирає вільну IP-адресу з налаштованого діапазону IP для Service з `type: ClusterIP`.

_статично_
: ви вказуєте IP-адресу за своїм вибором, з налаштованого діапазону IP для Service.

Для всього вашого кластера кожен Service `ClusterIP` повинен бути унікальним. Спроба створення Service із конкретним `ClusterIP`, що вже був призначений, призведе до помилки.

## З чого випливає необхідність резервування IP-адрес для ClusterIP Service? {#why-do-you-need-to-reserve-service-cluster-ips}

Іноді вам може знадобитися мати Serviceʼи, які працюють на відомих IP-адресах, щоб інші компоненти та користувачі в кластері могли їх використовувати.

Найкращим прикладом є Service DNS для кластера. Як мʼяка конвенція, деякі встановлювачі Kubernetes відводять 10-ту IP-адресу з діапазону IP-адрес Service для служби DNS. Припустимо, ви налаштували кластер із діапазоном IP-адрес Service 10.96.0.0/16 і хочете, щоб ваша IP-адреса Service DNS була 10.96.0.10, вам доведеться створити Service, подібний до цього:

```yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    kubernetes.io/name: CoreDNS
  name: kube-dns
  namespace: kube-system
spec:
  clusterIP: 10.96.0.10
  ports:
  - name: dns
    port: 53
    protocol: UDP
    targetPort: 53
  - name: dns-tcp
    port: 53
    protocol: TCP
    targetPort: 53
  selector:
    k8s-app: kube-dns
  type: ClusterIP
```

Але, як це було пояснено раніше, IP-адреса 10.96.0.10 не була зарезервована. Якщо інші Service створюються перед або паралельно з динамічним виділенням, існує шанс, що вони можуть зайняти цю IP-адресу, тому ви не зможете створити Service DNS, оскільки це призведе до конфлікту.

## Як уникнути конфліктів IP-адрес ClusterIP Сервісу? {#avoid-ClusterIP-conflict}

Стратегія виділення, реалізована в Kubernetes для виділення ClusterIPs Service, зменшує ризик колізій.

`ClusterIP` діапазон поділений на основі формули `min(max(16, cidrSize / 16), 256)`, описано як _ніколи менше ніж 16 або більше за 256 із поступовим кроком між ними_.

Динамічне призначення IP типово використовує верхній діапазон, якщо цей діапазон вичерпано, то буде використано нижній діапазон. Це дозволить користувачам використовувати статичні виділення в нижньому діапазоні із низьким ризиком колізій.

## Приклади {#allocation-examples}

### Приклад 1 {#allocation-example-1}

У цьому прикладі використовується діапазон IP-адрес: 10.96.0.0/24 (нотація CIDR) для IP-адрес Serviceʼів.

Розмір діапазону: 2<sup>8</sup> - 2 = 254
Зсув діапазону: `min(max(16, 256/16), 256)` = `min(16, 256)` = 16
Початок статичного діапазону: 10.96.0.1
Кінець статичного діапазону: 10.96.0.16
Кінець діапазону: 10.96.0.254


<figure>
<div class="mermaid">
    
pie showData
    title 10.96.0.0/24
    "Статичний" : 16
    "Динамічний" : 238

</div>
</figure>

<noscript>
  <div class="alert alert-secondary callout" role="note">
    <em class="javascript-required">Вам потрібно <a href="https://www.enable-javascript.com/">увімкнути</a> JavaScript, щоб переглядати цей вміст</em>
  </div>
</noscript>


### Приклад 2 {#allocation-example-2}

У цьому прикладі використовується діапазон IP-адрес: 10.96.0.0/20 (нотація CIDR) для IP-адрес Service.

Розмір діапазону: 2<sup>12</sup> - 2 = 4094
Зсув діапазону: `min(max(16, 4096/16), 256)` = `min(256, 256)` = 256
Початок статичного діапазону: 10.96.0.1
Кінець статичного діапазону: 10.96.1.0
Кінець діапазону: 10.96.15.254


<figure>
<div class="mermaid">
    
pie showData
    title 10.96.0.0/20
    "Статичний" : 256
    "Динамічний" : 3838

</div>
</figure>

<noscript>
  <div class="alert alert-secondary callout" role="note">
    <em class="javascript-required">Вам потрібно <a href="https://www.enable-javascript.com/">увімкнути</a> JavaScript, щоб переглядати цей вміст</em>
  </div>
</noscript>


### Приклад 3 {#allocation-example-3}

У цьому прикладі використовується діапазон IP-адрес: 10.96.0.0/16 (нотація CIDR) для IP-адрес Service.

Розмір діапазону: 2<sup>16</sup> - 2 = 65534
Зсув діапазону: `min(max(16, 65536/16), 256)` = `min(4096, 256)` = 256
Початок статичного діапазону: 10.96.0.1
Кінець статичного діапазону: 10.96.1.0
Кінець діапазону: 10.96.255.254


<figure>
<div class="mermaid">
    
pie showData
    title 10.96.0.0/16
    "Статичний" : 256
    "Динамічний" : 65278

</div>
</figure>

<noscript>
  <div class="alert alert-secondary callout" role="note">
    <em class="javascript-required">Вам потрібно <a href="https://www.enable-javascript.com/">увімкнути</a> JavaScript, щоб переглядати цей вміст</em>
  </div>
</noscript>


## Що далі

* Дізнайтеся про [Політики зовнішнього трафіку Service](/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip)
* Дізнайтеся про [Підключення застосунків за допомогою Service](/docs/tutorials/services/connect-applications-service/)
* Дізнайтеся про [Service](/docs/concepts/services-networking/service/)
