Використання перенаправлення портів для доступу до застосунків у кластері
Ця сторінка показує, як використовувати kubectl port-forward
для підключення до сервера MongoDB, який працює у кластері Kubernetes. Такий тип підключення може бути корисним для налагодження бази даних.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Версія вашого Kubernetes сервера має бути не старішою ніж v1.10. Для перевірки версії введітьkubectl version
.- Встановіть MongoDB Shell.
Створення розгортання та сервісу MongoDB
Створіть Deployment, що запускає MongoDB:
kubectl apply -f https://k8s.io/examples/application/mongodb/mongo-deployment.yaml
Вивід успішної команди підтверджує, що Deployment створено:
deployment.apps/mongo created
Перегляньте стан Podʼа, щоб переконатися, що він готовий:
kubectl get pods
Вивід відображає показує Pod:
NAME READY STATUS RESTARTS AGE mongo-75f59d57f4-4nd6q 1/1 Running 0 2m4s
Перегляньте стан Deployment:
kubectl get deployment
Вивід відображає, що Deployment було створено:
NAME READY UP-TO-DATE AVAILABLE AGE mongo 1/1 1 1 2m21s
Deployment автоматично керує ReplicaSet. Перегляньте стан ReplicaSet, використовуючи:
kubectl get replicaset
Вивід показує, що ReplicaSet був створений:
NAME DESIRED CURRENT READY AGE mongo-75f59d57f4 1 1 1 3m12s
Створіть Service для доступу до MongoDB в мережі:
kubectl apply -f https://k8s.io/examples/application/mongodb/mongo-service.yaml
Вивід успішної команди підтверджує, що Service був створений:
service/mongo created
Перевірте створений Service:
kubectl get service mongo
Вивід показує створений Service:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mongo ClusterIP 10.96.41.183 <none> 27017/TCP 11s
Переконайтеся, що сервер MongoDB працює у Pod та слухає на порту 27017:
# Замініть mongo-75f59d57f4-4nd6q на імʼя Pod kubectl get pod mongo-75f59d57f4-4nd6q --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
Вивід показує порт для MongoDB у цьому Pod:
27017
27017 є офіційним TCP портом для MongoDB.
Перенаправлення локального порту на порт Pod
kubectl port-forward
дозволяє використовувати імʼя ресурсу, такого як імʼя Podʼа, для вибору відповідного Podʼа для перенаправлення портів.# Замініть mongo-75f59d57f4-4nd6q на імʼя Pod kubectl port-forward mongo-75f59d57f4-4nd6q 28015:27017
що те саме, що і
kubectl port-forward pods/mongo-75f59d57f4-4nd6q 28015:27017
або
kubectl port-forward deployment/mongo 28015:27017
або
kubectl port-forward replicaset/mongo-75f59d57f4 28015:27017
або
kubectl port-forward service/mongo 28015:27017
Будь-яка з наведених вище команд працює. Вивід схожий на це:
Forwarding from 127.0.0.1:28015 -> 27017 Forwarding from [::1]:28015 -> 27017
Примітка:
kubectl port-forward
не повертає інформацію. Щоб продовжити вправи, вам потрібно буде відкрити інший термінал.Запустіть інтерфейс командного рядка MongoDB:
mongosh --port 28015
На командному рядку MongoDB введіть команду
ping
:db.runCommand( { ping: 1 } )
Успішний запит ping повертає:
{ ok: 1 }
Дозвольте kubectl вибрати локальний порт
Якщо вам не потрібен конкретний локальний порт, ви можете дозволити kubectl
вибрати та призначити локальний порт і таким чином позбавити себе від необхідності керувати конфліктами локальних портів, з дещо простішим синтаксисом:
kubectl port-forward deployment/mongo :27017
Інструмент kubectl
знаходить номер локального порту, який не використовується (уникаючи низьких номерів портів, оскільки вони можуть використовуватися іншими застосунками). Вивід схожий на:
Forwarding from 127.0.0.1:63753 -> 27017
Forwarding from [::1]:63753 -> 27017
Обговорення
Підключення до локального порту 28015 пересилаються на порт 27017 Podʼа, який запускає сервер MongoDB. З цим підключенням ви можете використовувати свій локальний робочий компʼютер для налагодження бази даних, яка працює у Pod.
Примітка:
kubectl port-forward
реалізовано тільки для TCP портів. Підтримка UDP протоколу відстежується у issue 47862.Що далі
Дізнайтеся більше про kubectl port-forward.