Використання 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.