{{/* Creates one ClusterIP Service per proxy entry. No selector is set — traffic routing is handled by the paired Endpoints object. The Service name MUST match the Endpoints name for K8s to associate them. */}} {{- range .Values.proxies }} {{- $proxy := . }} {{- $proxyName := include "ext-proxy.resourceName" $proxy.name }} --- apiVersion: v1 kind: Service metadata: name: {{ $proxyName }} namespace: {{ $.Release.Namespace }} labels: {{- include "ext-proxy.labels" $ | nindent 4 }} app.kubernetes.io/component: {{ $proxyName }} spec: # ClusterIP with no selector: Kubernetes will not auto-manage endpoints. # The companion Endpoints object (same name) provides the external addresses. type: ClusterIP ports: - name: http port: {{ $proxy.port }} targetPort: {{ $proxy.port }} protocol: TCP {{- end }}