Helm chart (один чарт создаёт Service + Endpoints + Ingress на каждый прокси):
- _helpers.tpl: хелперы ext-proxy.resourceName, ext-proxy.labels
- service.yaml: ClusterIP без selector — имя совпадает с Endpoints
- endpoints.yaml: внешние IP(s) + порт; несколько IP → round-robin через kube-proxy
- ingress.yaml: слияние аннотаций (defaults → сгенерированные → уровень прокси);
поддержка TLS, basic auth, WebSocket, несколько хостов, маршрутизация по пути
- secret-auth.yaml: htpasswd Secret создаётся только при auth.enabled=true + credentials
- NOTES.txt: список прокси + команды проверки после установки
Ansible роль:
- defaults/main.yml: ext_proxy_namespace, ext_proxy_defaults, ext_proxy_proxies
- tasks/main.yml: валидация → namespace → копировать chart → lint → helm upgrade --install --atomic
- templates/values.yaml.j2: преобразование Ansible-переменных в Helm values через to_yaml
Интеграция: Makefile addon-ext-proxy, флаг addons.yml, playbooks/addons.yml,
docs/addons.md, README.md (счётчик 37 аддонов)
README.md на русском языке с полной документацией:
архитектура, настройка, функции, DNS, проверка, примеры манифестов, устранение неисправностей
Дополнительно: splitgw_deploy_mode изменён на k8s
43 lines
2.2 KiB
Plaintext
43 lines
2.2 KiB
Plaintext
╔══════════════════════════════════════════════════════════════╗
|
|
║ External Services Ingress Proxy — Installed ║
|
|
╚══════════════════════════════════════════════════════════════╝
|
|
|
|
Namespace : {{ .Release.Namespace }}
|
|
Release : {{ .Release.Name }}
|
|
|
|
Proxied services:
|
|
{{- range .Values.proxies }}
|
|
{{- $proxy := . }}
|
|
{{- $proxyName := include "ext-proxy.resourceName" $proxy.name }}
|
|
{{- $tlsEnabled := $proxy.tls | default dict | dig "enabled" ($.Values.defaults.tls.enabled | default false) }}
|
|
{{- $schema := "http" }}
|
|
{{- if $tlsEnabled }}{{ $schema = "https" }}{{ end }}
|
|
• {{ $proxyName }}
|
|
Hosts : {{ $proxy.hosts | default (list ($proxy.host | default "?")) | join ", " }}
|
|
Backend: {{ $proxy.ips | default (list $proxy.ip) | join ", " }}:{{ $proxy.port }}
|
|
URL : {{ $schema }}://{{ $proxy.hosts | default (list ($proxy.host | default "")) | first }}
|
|
{{- end }}
|
|
|
|
─── Verify ────────────────────────────────────────────────────
|
|
# List all Ingress resources:
|
|
kubectl -n {{ .Release.Namespace }} get ingress
|
|
|
|
# Check Endpoints are populated:
|
|
kubectl -n {{ .Release.Namespace }} get endpoints
|
|
|
|
# Describe a specific Ingress:
|
|
kubectl -n {{ .Release.Namespace }} describe ingress <name>
|
|
|
|
─── DNS ───────────────────────────────────────────────────────
|
|
Point all proxy hostnames to your kube-vip VIP:
|
|
|
|
<proxy-host> IN A <kube-vip-IP>
|
|
|
|
─── Troubleshooting ───────────────────────────────────────────
|
|
# ingress-nginx logs:
|
|
kubectl -n ingress-nginx logs -l app.kubernetes.io/name=ingress-nginx --tail=50 -f
|
|
|
|
# Check connectivity from a pod:
|
|
kubectl run curl --rm -it --image=curlimages/curl -- \
|
|
curl -v http://<service-name>.<namespace>:<port>
|