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
41 lines
1.4 KiB
YAML
41 lines
1.4 KiB
YAML
{{/*
|
|
Creates a basic-auth Secret for each proxy that has:
|
|
auth.enabled: true
|
|
auth.credentials: "<htpasswd string>" (and no auth.secretName — use existing instead)
|
|
|
|
The Secret key MUST be "auth" for nginx's auth-file type (default).
|
|
Reference: nginx.ingress.kubernetes.io/auth-secret-type: auth-file
|
|
|
|
Generate credentials with:
|
|
htpasswd -nb admin 'mypassword'
|
|
# outputs: admin:$apr1$...
|
|
*/}}
|
|
{{- range .Values.proxies }}
|
|
{{- $proxy := . }}
|
|
{{- $d := $.Values.defaults }}
|
|
{{- $proxyName := include "ext-proxy.resourceName" $proxy.name }}
|
|
|
|
{{- $proxyAuth := $proxy.auth | default dict }}
|
|
{{- $defAuth := $d.auth | default dict }}
|
|
{{- $authEnabled := $proxyAuth.enabled | default $defAuth.enabled | default false }}
|
|
{{- $existingSec := $proxyAuth.secretName | default $defAuth.secretName | default "" }}
|
|
{{- $credentials := $proxyAuth.credentials | default $defAuth.credentials | default "" }}
|
|
|
|
{{/* Only create a Secret when auth is on, no existing secret is referenced, and credentials are provided */}}
|
|
{{- if and $authEnabled (not $existingSec) $credentials }}
|
|
---
|
|
apiVersion: v1
|
|
kind: Secret
|
|
metadata:
|
|
name: {{ $proxyName }}-auth
|
|
namespace: {{ $.Release.Namespace }}
|
|
labels:
|
|
{{- include "ext-proxy.labels" $ | nindent 4 }}
|
|
app.kubernetes.io/component: {{ $proxyName }}
|
|
type: Opaque
|
|
data:
|
|
# nginx auth-file expects the key to be named "auth"
|
|
auth: {{ $credentials | b64enc | quote }}
|
|
{{- end }}
|
|
{{- end }}
|