Використання перенаправлення портів для доступу до застосунків у кластері
Ця сторінка показує, як використовувати 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 2m21sDeployment автоматично керує 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:
2701727017 є офіційним 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.