# Оголошення мережевої політики

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

---

<!-- overview -->

Цей документ допоможе вам розпочати використання API мережевої політики Kubernetes [NetworkPolicy API](/docs/concepts/services-networking/network-policies/), щоб оголосити політики мережі, які керують тим, як Podʼи спілкуються один з одним.

<div class="alert alert-secondary callout third-party-content" role="note"><strong>Примітка:</strong>&puncsp;Цей розділ містить посилання на проєкти сторонніх розробників, які надають функціонал, необхідний для Kubernetes. Автори проєкту Kubernetes не несуть відповідальності за ці проєкти. Проєкти вказано в алфавітному порядку. Щоб додати проєкт до цього списку, ознайомтеся з <a href="/uk/docs/contribute/style/content-guide/#third-party-content">посібником з контенту</a> перед надсиланням змін. <a href="#third-party-content-disclaimer">Докладніше.</a></div>


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

<p>Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою <a href="https://minikube.sigs.k8s.io/docs/tutorials/multi_node/">minikube</a> або використовувати одну з цих пісочниць:</p>
<ul>
<li><a href="https://labs.iximiuz.com/playgrounds?category=kubernetes&filter=all">iximiuz Labs</a></li>
<li><a href="https://killercoda.com/playgrounds/scenario/kubernetes">Killercoda</a></li>
<li><a href="https://kodekloud.com/public-playgrounds">KodeKloud</a></li>
</ul>
 
 
 Версія вашого Kubernetes сервера має бути не старішою ніж v1.8.
  <p>Для перевірки версії введіть  <code>kubectl version</code>.</p>


Переконайтеся, що ви налаштували постачальника мережі з підтримкою політики мережі. Існує кілька постачальників мережі, які підтримують NetworkPolicy, включаючи:

* [Antrea](/docs/tasks/administer-cluster/network-policy-provider/antrea-network-policy/)
* [Calico](/docs/tasks/administer-cluster/network-policy-provider/calico-network-policy/)
* [Cilium](/docs/tasks/administer-cluster/network-policy-provider/cilium-network-policy/)
* [Kube-router](/docs/tasks/administer-cluster/network-policy-provider/kube-router-network-policy/)
* [Romana](/docs/tasks/administer-cluster/network-policy-provider/romana-network-policy/)
* [Weave Net](/docs/tasks/administer-cluster/network-policy-provider/weave-network-policy/)

<!-- steps -->

## Створення `nginx` deployment та надання доступу через Service {#create-an-nginx-deployment-and-expose-it-via-a-service}

Щоб переглянути, як працює політика мережі Kubernetes, почніть зі створення Deployment `nginx`.

```console
kubectl create deployment nginx --image=nginx
```

```none
deployment.apps/nginx created
```

Експонуйте Deployment через Service під назвою `nginx`.

```console
kubectl expose deployment nginx --port=80
```

```none
service/nginx exposed
```

Вищезазначені команди створюють Deployment з Podʼом nginx і експонують Deployment через Service під назвою `nginx`. Pod nginx та Deployment знаходяться в просторі імен `default`.

```console
kubectl get svc,pod
```

```none
NAME                        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/kubernetes          10.100.0.1    <none>        443/TCP    46m
service/nginx               10.100.0.16   <none>        80/TCP     33s

NAME                        READY         STATUS        RESTARTS   AGE
pod/nginx-701339712-e0qfq   1/1           Running       0          35s
```

## Перевірте роботу Service, звернувшись до неї з іншого Podʼа {#test-the-service-by-accessing-it-from-another-pod}

Ви повинні мати можливість звернутися до нового Service `nginx` з інших Podʼів. Щоб отримати доступ до Service `nginx` з іншого Podʼа в просторі імен `default`, запустіть контейнер busybox:

```console
kubectl run busybox --rm -ti --image=busybox -- /bin/sh
```

У вашій оболонці запустіть наступну команду:

```shell
wget --spider --timeout=1 nginx
```

```none
Connecting to nginx (10.100.0.16:80)
remote file exists
```

## Обмеження доступу до Service `nginx` {#limit-access-to-the-nginx-service}

Щоб обмежити доступ до Service `nginx` так, щоб запити до неї могли робити лише Podʼи з міткою `access: true`, створіть обʼєкт NetworkPolicy наступним чином:


















<div class="highlight code-sample">
    <div class="copy-code-icon">
    <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/uk/examples/service/networking/nginx-policy.yaml" download="service/networking/nginx-policy.yaml"><code>service/networking/nginx-policy.yaml</code>
    </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('service-networking-nginx-policy-yaml')" title="Копіювати service/networking/nginx-policy.yaml до буферу обміну"></img></div>
    <div class="includecode" id="service-networking-nginx-policy-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">networking.k8s.io/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">NetworkPolicy</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">access-nginx</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">podSelector</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">matchLabels</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</span><span class="p">:</span><span class="w"> </span><span class="l">nginx</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">ingress</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">from</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">podSelector</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">matchLabels</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">access</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;true&#34;</span><span class="w">
</span></span></span></code></pre></div></div>
</div>

Назва обʼєкта NetworkPolicy повинна бути дійсним [піддоменом DNS](/docs/concepts/overview/working-with-objects/names#dns-subdomain-names).


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>NetworkPolicy включає <code>podSelector</code>, який вибирає групу Podʼів, до яких застосовується політика. Ви можете побачити, що ця політика вибирає Podʼи з міткою <code>app=nginx</code>. Мітка автоматично додавалася до Podʼа в Deployment <code>nginx</code>. Порожній <code>podSelector</code> вибирає всі Podʼи в просторі імен.</div>


## Застосуйте політику до Service {#apply-the-policy-to-the-service}

Використовуйте kubectl для створення NetworkPolicy з файлу `nginx-policy.yaml` вище:

```console
kubectl apply -f https://k8s.io/examples/service/networking/nginx-policy.yaml
```

```none
networkpolicy.networking.k8s.io/access-nginx created
```

## Перевірте доступ до Service, коли мітка доступу не визначена {#test-access-to-the-service-when-the-access-label-is-not-defined}

Коли ви намагаєтеся отримати доступ до Service `nginx` з Podʼа без відповідних міток, запит завершується тайм-аутом:

```console
kubectl run busybox --rm -ti --image=busybox -- /bin/sh
```

У вашій оболонці виконайте команду:

```shell


wget --spider --timeout=1 nginx
```

```none
Connecting to nginx (10.100.0.16:80)
wget: download timed out
```

## Визначте мітку доступу і перевірте знову {#define-access-label-and-test-again}

Ви можете створити Pod із відповідними мітками, щоб переконатися, що запит дозволено:

```console
kubectl run busybox --rm -ti --labels="access=true" --image=busybox -- /bin/sh
```

У вашій оболонці запустіть команду:

```shell
wget --spider --timeout=1 nginx
```

```none
Connecting to nginx (10.100.0.16:80)
remote file exists
```
