Використання Service для доступу до застосунку у кластері
Ця сторінка показує, як створити обʼєкт Service в Kubernetes, який зовнішні клієнти можуть використовувати для доступу до застосунку, що працює у кластері. Service забезпечує балансування навантаження для застосунку, який має два запущені екземпляри.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Цілі
- Запустити два екземпляри застосунку Hello World.
- Створити обʼєкт Service, який експонує порт вузла.
- Використовувати обʼєкт Service для доступу до запущеного застосунку.
Створення Service для застосунку, який працює у двох Podʼах
Ось конфігураційний файл для Deployment застосунку:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world
spec:
selector:
matchLabels:
run: load-balancer-example
replicas: 2
template:
metadata:
labels:
run: load-balancer-example
spec:
containers:
- name: hello-world
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0
ports:
- containerPort: 8080
protocol: TCP
Запустіть застосунок Hello World у вашому кластері: Створіть Deployment застосунку, використовуючи файл вище:
kubectl apply -f https://k8s.io/examples/service/access/hello-application.yaml
Попередня команда створює Deployment та повʼязаний з ним ReplicaSet. ReplicaSet має два Podʼи кожен з яких запускає застосунок Hello World.
Перегляньте інформацію про Deployment:
kubectl get deployments hello-world kubectl describe deployments hello-world
Перегляньте інформацію про ваші обʼєкти ReplicaSet:
kubectl get replicasets kubectl describe replicasets
Створіть обʼєкт Service, який експонує Deployment:
kubectl expose deployment hello-world --type=NodePort --name=example-service
Перегляньте інформацію про Service:
kubectl describe services example-service
Вивід буде схожий на цей:
Name: example-service Namespace: default Labels: run=load-balancer-example Annotations: <none> Selector: run=load-balancer-example Type: NodePort IP: 10.32.0.16 Port: <unset> 8080/TCP TargetPort: 8080/TCP NodePort: <unset> 31496/TCP Endpoints: 10.200.1.4:8080, 10.200.2.5:8080 Session Affinity: None Events: <none>
Занотуйте значення NodePort для Service. Наприклад, у попередньому виводі значення NodePort становить 31496.
Перегляньте Podʼи, що запускають застосунок Hello World:
kubectl get pods --selector="run=load-balancer-example" --output=wide
Вивід буде схожий на цей:
NAME READY STATUS ... IP NODE hello-world-2895499144-bsbk5 1/1 Running ... 10.200.1.4 worker1 hello-world-2895499144-m1pwt 1/1 Running ... 10.200.2.5 worker2
Отримайте публічну IP-адресу одного з ваших вузлів, що запускає Pod Hello World. Як ви отримаєте цю адресу залежить від того, як ви налаштували свій кластер. Наприклад, якщо ви використовуєте Minikube, ви можете побачити адресу вузла, виконавши команду
kubectl cluster-info
. Якщо ви використовуєте trptvgkzhb Google Compute Engine, ви можете використати командуgcloud compute instances list
для перегляду публічних адрес ваших вузлів.На обраному вами вузлі створіть правило брандмауера, яке дозволяє TCP-трафік на вашому порту вузла. Наприклад, якщо ваш Service має значення NodePort 31568, створіть правило брандмауера, яке дозволяє TCP-трафік на порт 31568. Різні постачальники хмарних послуг пропонують різні способи налаштування правил брандмауера.
Використовуйте адресу вузла та порт вузла для доступу до застосунку Hello World:
curl http://<public-node-ip>:<node-port>
де
<public-node-ip>
— це публічна IP-адреса вашого вузла, а<node-port>
— це значення NodePort для вашого Service. Відповідь на успішний запит буде повідомленням з привітанням:Hello, world! Version: 2.0.0 Hostname: hello-world-cdd4458f4-m47c8
Використання конфігураційного файлу Service
Як альтернатива використанню kubectl expose
, ви можете використовувати конфігураційний файл Service для створення Service.
Очищення
Щоб видалити Service, введіть цю команду:
kubectl delete services example-service
Щоб видалити Deployment, ReplicaSet та Podʼи, що запускають застосунок Hello World, введіть цю команду:
kubectl delete deployment hello-world
Що далі
Ознайомтесь з посібником Підключення застосунків за допомогою Service.