docs: добавлены примеры доступа к приложениям и кроссплатформенность

- Добавлен раздел 'Доступ к приложениям'
- Описан доступ через Ingress с примерами hosts файла
- Описан доступ через ClusterIP с ручным port-forward
- Добавлен раздел 'Кроссплатформенность' для macOS и Linux
- Добавлены примеры работы с пользовательскими приложениями
This commit is contained in:
Сергей Антропов
2025-10-26 09:59:41 +03:00
parent 3b8c6e52ea
commit 4ca882b5f7

View File

@@ -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 <namespace> svc/<service-name> <local-port>:<service-port>
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 <PID>
```
### Автоматический 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