diff --git a/docs/kubernetes-kind.md b/docs/kubernetes-kind.md index 3b86b93..5ea794a 100644 --- a/docs/kubernetes-kind.md +++ b/docs/kubernetes-kind.md @@ -297,6 +297,128 @@ http://localhost:8081 https://localhost:8443 ``` +## Доступ к приложениям + +### Доступ через Ingress + +Если ваше приложение использует Ingress с доменным именем: + +1. **Создайте манифест с Ingress:** + +```yaml +# my-app-ingress.yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: my-app-ingress +spec: + rules: + - host: my-app.local + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: my-app-service + port: + number: 80 +``` + +2. **Примените манифест:** + +```bash +make k8s manifest apply kubernetes my-app-ingress.yaml +``` + +3. **Добавьте домен в hosts файл:** + +**macOS/Linux:** +```bash +echo "127.0.0.1 my-app.local" | sudo tee -a /etc/hosts +``` + +4. **Откройте приложение через Ingress порт:** + +```bash +# HTTP через Ingress +curl http://my-app.local:8081 +# или в браузере +open http://my-app.local:8081 + +# HTTPS через Ingress +curl -k https://my-app.local:8443 +``` + +**Важно:** Используйте порт Ingress (8081 для HTTP, 8443 для HTTPS) вместе с доменным именем! + +### Доступ через ClusterIP (port-forward) + +Если ваше приложение имеет сервис с типом ClusterIP: + +1. **Установите приложение (например, через Helm):** + +```bash +make k8s helm apply kubernetes my-app bitnami/nginx +``` + +2. **Узнайте имя сервиса:** + +```bash +# Откройте shell в контейнере +make k8s shell kubernetes + +# Посмотрите сервисы +kubectl get svc -A + +# Выход из контейнера +exit +``` + +3. **Создайте port-forward вручную:** + +```bash +# Экспортируйте kubeconfig +export KUBECONFIG=$(pwd)/kubeconfig + +# Создайте port-forward +# Синтаксис: kubectl port-forward -n svc/ : +kubectl port-forward -n default svc/my-app-service 8080:80 +``` + +4. **Откройте приложение:** + +```bash +# Доступно на localhost:8080 +curl http://localhost:8080 +open http://localhost:8080 +``` + +**Примечание:** Port-forward запустится в фоне. Для остановки нажмите `Ctrl+C` или найдите процесс и завершите его: + +```bash +# Найти процесс port-forward +ps aux | grep "kubectl port-forward" + +# Завершить процесс (замените PID) +kill +``` + +### Автоматический port-forward для пользовательских приложений + +Если вы хотите, чтобы port-forward создавался автоматически, добавьте порт в пресет: + +```yaml +# molecule/presets/k8s/kubernetes.yml +addon_ports: + # ... существующие порты аддонов + my_app: 8080 # Ваш порт +``` + +Затем в коде `scripts/portforward.py` добавьте логику для этих портов. Однако, это требует знания имени сервиса и namespace заранее. + +**Рекомендация:** Для пользовательских приложений используйте ручной port-forward или Ingress. + ## Примеры использования ### Создание и настройка кластера @@ -466,6 +588,39 @@ kind_clusters: metrics_server: 4443 # Port-forward для Metrics Server ``` +## Кроссплатформенность + +Port-forward работает одинаково на **macOS** и **Linux**: + +### macOS + +```bash +# Проверка установки +python3 --version +kubectl version --client + +# Работа с port-forward +make k8s portforward create +make k8s portforward list +``` + +### Linux + +```bash +# Проверка установки +python3 --version +kubectl version --client + +# Работа с port-forward (то же самое!) +make k8s portforward create +make k8s portforward list +``` + +**Важно:** Port-forward работает идентично на обеих платформах, так как использует стандартные утилиты: +- `kubectl` (кроссплатформенный) +- Python 3 (кроссплатформенный) +- `kubectl port-forward` команда (кроссплатформенная) + ## Best Practices 1. **Порты:** Port-forward создается автоматически при создании кластера - не нужно делать это вручную @@ -476,6 +631,7 @@ kind_clusters: 6. **Удаление:** Используйте `make k8s destroy` - он автоматически очистит port-forward 7. **Helm:** Используйте официальные Helm charts из проверенных репозиториев 8. **Изоляция:** Каждый preset может иметь свой уникальный кластер с разными настройками +9. **Ingress vs ClusterIP:** Используйте Ingress для доступа по доменным именам, ClusterIP + port-forward для прямого доступа к сервисам ## Troubleshooting