# Відкриття зовнішньої IP-адреси для доступу до застосунку в кластері

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

---

<!-- overview -->

Ця сторінка показує, як створити обʼєкт Kubernetes Service, який відкриває зовнішню IP-адресу.

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

* Встановіть [kubectl](/docs/tasks/tools/).
* Використовуйте хмарного провайдера, такого як Google Kubernetes Engine або Amazon Web Services, щоб створити кластер Kubernetes. У цьому підручнику створюється [зовнішній балансувальник навантаження](/docs/tasks/access-application-cluster/create-external-load-balancer/), який вимагає хмарного провайдера.
* Налаштуйте `kubectl` для спілкування з вашим API-сервером Kubernetes. Для інструкцій дивіться документацію вашого хмарного провайдера.

## Цілі

* Запустіть пʼять екземплярів застосунку Hello World.
* Створіть обʼєкт Service, який відкриває зовнішню IP-адресу.
* Використовуйте обʼєкт Service для доступу до запущеного застосунку.

<!-- lessoncontent -->

## Створення Service для застосунку, що працює в пʼяти Podʼах {#creating-a-service-for-an-application-running-in-five-pods}

1. Запустіть застосунок Hello World у вашому кластері:

   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   <div class="highlight code-sample">
       <div class="copy-code-icon">
       <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/uk/examples/service/load-balancer-example.yaml" download="service/load-balancer-example.yaml"><code>service/load-balancer-example.yaml</code>
       </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('service-load-balancer-example-yaml')" title="Копіювати service/load-balancer-example.yaml до буферу обміну"></img></div>
       <div class="includecode" id="service-load-balancer-example-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">apps/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">Deployment</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">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">load-balancer-example</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">hello-world</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">replicas</span><span class="p">:</span><span class="w"> </span><span class="m">5</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">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.kubernetes.io/name</span><span class="p">:</span><span class="w"> </span><span class="l">load-balancer-example</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">template</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span><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">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">load-balancer-example</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">    </span><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">containers</span><span class="p">:</span><span class="w">
   </span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">gcr.io/google-samples/hello-app:2.0</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">hello-world</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">containerPort</span><span class="p">:</span><span class="w"> </span><span class="m">8080</span><span class="w">
   </span></span></span></code></pre></div></div>
   </div>

   ```shell
   kubectl apply -f https://k8s.io/examples/service/load-balancer-example.yaml
   ```

   Попередня команда створює <a class='glossary-tooltip' title='Керує реплікованим застосунком у вашому кластері.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/workloads/controllers/deployment/' target='_blank' aria-label='Deployment'>Deployment</a> і повʼязаний з ним <a class='glossary-tooltip' title='ReplicaSet забезпечує наявність певної кількості реплік обʼєкта Pod в поточний момент часу' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/workloads/controllers/replicaset/' target='_blank' aria-label='ReplicaSet'>ReplicaSet</a>. ReplicaSet має пʼять <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>, кожен з яких запускає застосунок Hello World.

1. Виведіть інформацію про Deployment:

   ```shell
   kubectl get deployments hello-world
   kubectl describe deployments hello-world
   ```

1. Виведіть інформацію про обʼєкти ReplicaSet:

   ```shell
   kubectl get replicasets
   kubectl describe replicasets
   ```

1. Створіть обʼєкт Service, який експонує Deployment:

   ```shell
   kubectl expose deployment hello-world --type=LoadBalancer --name=my-service
   ```

1. Виведіть інформацію про Service:

   ```shell
   kubectl get services my-service
   ```

   Вивід буде подібний до:

   ```console
   NAME         TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)    AGE
   my-service   LoadBalancer   10.3.245.137   104.198.205.71   8080/TCP   54s
   ```

   <div class="alert alert-info" role="alert"><div class="h4 alert-heading" role="heading">Примітка</div>



   Сервіс типу `type=LoadBalancer` підтримується зовнішніми хмарними провайдерами, що не розглядається в цьому прикладі, будь ласка, зверніться до [встановлення `type: LoadBalancer` для вашого Service](/docs/concepts/services-networking/service/#loadbalancer) для деталей.

   </div>


   <div class="alert alert-info" role="alert"><div class="h4 alert-heading" role="heading">Примітка</div>



   Якщо зовнішня IP-адреса показується як \<pending\>, зачекайте хвилину та введіть ту саму команду знову.

   </div>


1. Виведіть детальну інформацію про Service:

   ```shell
   kubectl describe services my-service
   ```

   Вивід буде подібний до:

   ```console
   Name:           my-service
   Namespace:      default
   Labels:         app.kubernetes.io/name=load-balancer-example
   Annotations:    <none>
   Selector:       app.kubernetes.io/name=load-balancer-example
   Type:           LoadBalancer
   IP:             10.3.245.137
   LoadBalancer Ingress:   104.198.205.71
   Port:           <unset> 8080/TCP
   NodePort:       <unset> 32377/TCP
   Endpoints:      10.0.0.6:8080,10.0.1.6:8080,10.0.1.7:8080 + 2 more...
   Session Affinity:   None
   Events:         <none>
   ```

   Занотуйте зовнішню IP-адресу (`LoadBalancer Ingress`), відкриту вашим сервісом. У цьому прикладі, зовнішня IP-адреса — 104.198.205.71. Також занотуйте значення `Port` і `NodePort`. У цьому прикладі, `Port` — 8080, а `NodePort` — 32377.

1. У попередньому виводі ви можете побачити, що сервіс має кілька точок доступу: 10.0.0.6:8080, 10.0.1.6:8080, 10.0.1.7:8080 + ще 2. Це внутрішні адреси Podʼів, які запускають застосунок Hello World. Щоб переконатися, що це адреси Podʼів, введіть цю команду:

   ```shell
   kubectl get pods --output=wide
   ```

   Вивід буде подібний до:

   ```console
   NAME                         ...  IP         NODE
   hello-world-2895499144-1jaz9 ...  10.0.1.6   gke-cluster-1-default-pool-e0b8d269-1afc
   hello-world-2895499144-2e5uh ...  10.0.1.8   gke-cluster-1-default-pool-e0b8d269-1afc
   hello-world-2895499144-9m4h1 ...  10.0.0.6   gke-cluster-1-default-pool-e0b8d269-5v7a
   hello-world-2895499144-o4z13 ...  10.0.1.7   gke-cluster-1-default-pool-e0b8d269-1afc
   hello-world-2895499144-segjf ...  10.0.2.5   gke-cluster-1-default-pool-e0b8d269-cpuc
   ```

1. Використовуйте зовнішню IP-адресу (`LoadBalancer Ingress`) для доступу до застосунку Hello World:

   ```shell
   curl http://<external-ip>:<port>
   ```

   де `<external-ip>` — це зовнішня IP-адреса (`LoadBalancer Ingress`) вашого сервісу, а `<port>` — значення `Port` в описі вашого сервісу. Якщо ви використовуєте minikube, ввівши `minikube service my-service` автоматично відкриє застосунок Hello World в оглядачі.

   Відповідь на успішний запит — привітальне повідомлення:

   ```console
   Hello, world!
   Version: 2.0.0
   Hostname: 0bd46b45f32f
   ```

## Очищення

Щоб видалити Service, введіть цю команду:

```shell
kubectl delete services my-service
```

Щоб видалити Deployment, ReplicaSet і Podʼи, які запускають застосунок Hello World, введіть цю команду:

```shell
kubectl delete deployment hello-world
```

## Що далі

Дізнайтеся більше про [Підключення застосунків за допомогою Service](/docs/tutorials/services/connect-applications-service/).
