Відкриття зовнішньої IP-адреси для доступу до застосунку в кластері
Ця сторінка показує, як створити обʼєкт Kubernetes Service, який відкриває зовнішню IP-адресу.
Перш ніж ви розпочнете
- Встановіть kubectl.
- Використовуйте хмарного провайдера, такого як Google Kubernetes Engine або Amazon Web Services, щоб створити кластер Kubernetes. У цьому підручнику створюється зовнішній балансувальник навантаження, який вимагає хмарного провайдера.
- Налаштуйте
kubectl
для спілкування з вашим API-сервером Kubernetes. Для інструкцій дивіться документацію вашого хмарного провайдера.
Цілі
- Запустіть пʼять екземплярів застосунку Hello World.
- Створіть обʼєкт Service, який відкриває зовнішню IP-адресу.
- Використовуйте обʼєкт Service для доступу до запущеного застосунку.
Створення Service для застосунку, що працює в пʼяти Podʼах
Запустіть застосунок Hello World у вашому кластері:
apiVersion: apps/v1 kind: Deployment metadata: labels: app.kubernetes.io/name: load-balancer-example name: hello-world spec: replicas: 5 selector: matchLabels: app.kubernetes.io/name: load-balancer-example template: metadata: labels: app.kubernetes.io/name: load-balancer-example spec: containers: - image: gcr.io/google-samples/hello-app:2.0 name: hello-world ports: - containerPort: 8080
kubectl apply -f https://k8s.io/examples/service/load-balancer-example.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=LoadBalancer --name=my-service
Виведіть інформацію про Service:
kubectl get services my-service
Вивід буде подібний до:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-service LoadBalancer 10.3.245.137 104.198.205.71 8080/TCP 54s
Примітка:
Сервіс типуtype=LoadBalancer
підтримується зовнішніми хмарними провайдерами, що не розглядається в цьому прикладі, будь ласка, зверніться до цієї сторінки для деталей.Примітка:
Якщо зовнішня IP-адреса показується як <pending>, зачекайте хвилину та введіть ту саму команду знову.Виведіть детальну інформацію про Service:
kubectl describe services my-service
Вивід буде подібний до:
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.У попередньому виводі ви можете побачити, що сервіс має кілька точок доступу: 10.0.0.6:8080, 10.0.1.6:8080, 10.0.1.7:8080 + ще 2. Це внутрішні адреси Podʼів, які запускають застосунок Hello World. Щоб переконатися, що це адреси Podʼів, введіть цю команду:
kubectl get pods --output=wide
Вивід буде подібний до:
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
Використовуйте зовнішню IP-адресу (
LoadBalancer Ingress
) для доступу до застосунку Hello World:curl http://<external-ip>:<port>
де
<external-ip>
— це зовнішня IP-адреса (LoadBalancer Ingress
) вашого сервісу, а<port>
— значенняPort
в описі вашого сервісу. Якщо ви використовуєте minikube, ввівшиminikube service my-service
автоматично відкриє застосунок Hello World в оглядачі.Відповідь на успішний запит — привітальне повідомлення:
Hello, world! Version: 2.0.0 Hostname: 0bd46b45f32f
Очищення
Щоб видалити Service, введіть цю команду:
kubectl delete services my-service
Щоб видалити Deployment, ReplicaSet і Podʼи, які запускають застосунок Hello World, введіть цю команду:
kubectl delete deployment hello-world
Що далі
Дізнайтеся більше про Підключення застосунків за допомогою Service.