diff --git a/charts/unifi/Chart.yaml b/charts/unifi/Chart.yaml index a7b53925..b06d19d2 100644 --- a/charts/unifi/Chart.yaml +++ b/charts/unifi/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v1 appVersion: 5.9.29 description: Ubiquiti Network's Unifi Controller name: unifi -version: 0.3.0 +version: 0.3.1 keywords: - ubiquiti - unifi diff --git a/charts/unifi/README.md b/charts/unifi/README.md index 961105f6..097d8386 100644 --- a/charts/unifi/README.md +++ b/charts/unifi/README.md @@ -53,8 +53,20 @@ The following tables lists the configurable parameters of the Unifi chart and th | `controllerService.loadBalancerIP` | Loadbalance IP for the Unifi Controller | `{}` | | `controllerService.loadBalancerSourceRanges` | List of IP CIDRs allowed access to load balancer (if supported) | None | | `controllerService.externalTrafficPolicy` | Set the externalTrafficPolicy in the Service to either Cluster or Local | `Cluster` | -| `controllerService.stun.port` | Kubernetes UDP port where the Unifi STUN is exposed | `3478` | -| `controllerService.discovery.port` | Kubernetes UDP port for AP discovery | `10001` | +| `stunService.type` | Kubernetes service type for the Unifi STUN | `NodePort` | +| `stunService.port` | Kubernetes UDP port where the Unifi STUN is exposed | `3478` | +| `stunService.annotations` | Service annotations for the Unifi STUN | `{}` | +| `stunService.labels` | Custom labels | `{}` | +| `stunService.loadBalancerIP` | Loadbalance IP for the Unifi STUN | `{}` | +| `stunService.loadBalancerSourceRanges` | List of IP CIDRs allowed access to load balancer (if supported) | None | +| `stunService.externalTrafficPolicy` | Set the externalTrafficPolicy in the Service to either Cluster or Local | `Cluster` | +| `discoveryService.type` | Kubernetes service type for AP discovery | `NodePort` | +| `discoveryService.port` | Kubernetes UDP port for AP discovery | `10001` | +| `discoveryService.annotations` | Service annotations for AP discovery | `{}` | +| `discoveryService.labels` | Custom labels | `{}` | +| `discoveryService.loadBalancerIP` | Loadbalance IP for AP discovery | `{}` | +| `discoveryService.loadBalancerSourceRanges` | List of IP CIDRs allowed access to load balancer (if supported) | None | +| `discoveryService.externalTrafficPolicy` | Set the externalTrafficPolicy in the Service to either Cluster or Local | `Cluster` | | `ingress.enabled` | Enables Ingress | `false` | | `ingress.annotations` | Ingress annotations | `{}` | | `ingress.labels` | Custom labels | `{}` | @@ -105,12 +117,12 @@ Read through the [values.yaml](values.yaml) file. It has several commented out s devices run. If you run this as a `NodePort` (the default setting), make sure that there is an external load balancer that is directing traffic from port 8080 to the `NodePort` for this service. - - the `controllerService` exposes two additional ports: - - `discovery`: This needs to be reachable by the unifi devices on network but only during the discovery - phase. This is a UDP service. - - `stun`: Also used periodically by the unifi devices to communicate - with the controller using UDP. See [this article][ubnt 3] and [this other article][ubnt 4] for more information. +- `discoveryService`: This needs to be reachable by the unifi devices on the + network similar to the controller `Service` but only during the discovery + phase. This is a UDP service. +- `stunService`: Also used periodically by the unifi devices to communicate + with the controller using UDP. See [this article][ubnt 3] and [this other + article][ubnt 4] for more information. [docker]: https://hub.docker.com/r/jacobalberty/unifi/tags/ [github]: https://github.com/jacobalberty/unifi-docker diff --git a/charts/unifi/templates/controller-svc.yaml b/charts/unifi/templates/controller-svc.yaml index 3e6fea91..7cac96a6 100644 --- a/charts/unifi/templates/controller-svc.yaml +++ b/charts/unifi/templates/controller-svc.yaml @@ -46,20 +46,6 @@ spec: name: controller {{ if (and (eq .Values.controllerService.type "NodePort") (not (empty .Values.controllerService.nodePort))) }} nodePort: {{.Values.controllerService.nodePort}} -{{ end }} - - port: {{ .Values.controllerService.stun.port }} - targetPort: stun - protocol: UDP - name: stun -{{ if (and (eq .Values.controllerService.type "NodePort") (not (empty .Values.controllerService.stun.nodePort))) }} - nodePort: {{.Values.controllerService.stun.nodePort}} -{{ end }} - - port: {{ .Values.controllerService.discovery.port }} - targetPort: discovery - protocol: UDP - name: discovery -{{ if (and (eq .Values.controllerService.type "NodePort") (not (empty .Values.controllerService.discovery.nodePort))) }} - nodePort: {{.Values.controllerService.discovery.nodePort}} {{ end }} selector: app: {{ template "unifi.name" . }} diff --git a/charts/unifi/templates/discovery-svc.yaml b/charts/unifi/templates/discovery-svc.yaml new file mode 100644 index 00000000..b3f7b685 --- /dev/null +++ b/charts/unifi/templates/discovery-svc.yaml @@ -0,0 +1,52 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "unifi.fullname" . }}-discovery + labels: + app: {{ template "unifi.name" . }} + chart: {{ template "unifi.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- if .Values.discoveryService.labels }} +{{ toYaml .Values.discoveryService.labels | indent 4 }} +{{- end }} +{{- with .Values.discoveryService.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if (or (eq .Values.discoveryService.type "ClusterIP") (empty .Values.discoveryService.type)) }} + type: ClusterIP + {{- if .Values.discoveryService.clusterIP }} + clusterIP: {{ .Values.discoveryService.clusterIP }} + {{end}} +{{- else if eq .Values.discoveryService.type "LoadBalancer" }} + type: {{ .Values.discoveryService.type }} + {{- if .Values.discoveryService.loadBalancerIP }} + loadBalancerIP: {{ .Values.discoveryService.loadBalancerIP }} + {{- end }} + {{- if .Values.discoveryService.loadBalancerSourceRanges }} + loadBalancerSourceRanges: +{{ toYaml .Values.discoveryService.loadBalancerSourceRanges | indent 4 }} + {{- end -}} +{{- else }} + type: {{ .Values.discoveryService.type }} +{{- end }} +{{- if .Values.discoveryService.externalIPs }} + externalIPs: +{{ toYaml .Values.discoveryService.externalIPs | indent 4 }} +{{- end }} + {{- if .Values.discoveryService.externalTrafficPolicy }} + externalTrafficPolicy: {{ .Values.discoveryService.externalTrafficPolicy }} + {{- end }} + ports: + - port: {{ .Values.discoveryService.port }} + targetPort: discovery + protocol: UDP + name: discovery +{{ if (and (eq .Values.discoveryService.type "NodePort") (not (empty .Values.discoveryService.nodePort))) }} + nodePort: {{.Values.discoveryService.nodePort}} +{{ end }} + selector: + app: {{ template "unifi.name" . }} + release: {{ .Release.Name }} diff --git a/charts/unifi/templates/stun-svc.yaml b/charts/unifi/templates/stun-svc.yaml new file mode 100644 index 00000000..335e0c9b --- /dev/null +++ b/charts/unifi/templates/stun-svc.yaml @@ -0,0 +1,52 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "unifi.fullname" . }}-stun + labels: + app: {{ template "unifi.name" . }} + chart: {{ template "unifi.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- if .Values.stunService.labels }} +{{ toYaml .Values.stunService.labels | indent 4 }} +{{- end }} +{{- with .Values.stunService.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if (or (eq .Values.stunService.type "ClusterIP") (empty .Values.stunService.type)) }} + type: ClusterIP + {{- if .Values.stunService.clusterIP }} + clusterIP: {{ .Values.stunService.clusterIP }} + {{end}} +{{- else if eq .Values.stunService.type "LoadBalancer" }} + type: {{ .Values.stunService.type }} + {{- if .Values.stunService.loadBalancerIP }} + loadBalancerIP: {{ .Values.stunService.loadBalancerIP }} + {{- end }} + {{- if .Values.stunService.loadBalancerSourceRanges }} + loadBalancerSourceRanges: +{{ toYaml .Values.stunService.loadBalancerSourceRanges | indent 4 }} + {{- end -}} +{{- else }} + type: {{ .Values.stunService.type }} +{{- end }} +{{- if .Values.stunService.externalIPs }} + externalIPs: +{{ toYaml .Values.stunService.externalIPs | indent 4 }} +{{- end }} + {{- if .Values.stunService.externalTrafficPolicy }} + externalTrafficPolicy: {{ .Values.stunService.externalTrafficPolicy }} + {{- end }} + ports: + - port: {{ .Values.stunService.port }} + targetPort: stun + protocol: UDP + name: stun +{{ if (and (eq .Values.stunService.type "NodePort") (not (empty .Values.stunService.nodePort))) }} + nodePort: {{.Values.stunService.nodePort}} +{{ end }} + selector: + app: {{ template "unifi.name" . }} + release: {{ .Release.Name }} \ No newline at end of file diff --git a/charts/unifi/values.yaml b/charts/unifi/values.yaml index b04bb508..817b99b1 100644 --- a/charts/unifi/values.yaml +++ b/charts/unifi/values.yaml @@ -50,12 +50,48 @@ controllerService: # loadBalancerSourceRanges: [] ## Set the externalTrafficPolicy in the Service to either Cluster or Local # externalTrafficPolicy: Cluster - stun: - port: 3478 - # nodePort: - discovery: - port: 10001 - # nodePort: + +stunService: + type: NodePort + port: 3478 # udp + ## Specify the nodePort value for the LoadBalancer and NodePort service types. + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport + ## + # nodePort: + ## Provide any additional annotations which may be required. This can be used to + ## set the LoadBalancer service type to internal only. + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#internal-load-balancer + ## + annotations: {} + labels: {} + ## Use loadBalancerIP to request a specific static IP, + ## otherwise leave blank + ## + loadBalancerIP: + # loadBalancerSourceRanges: [] + ## Set the externalTrafficPolicy in the Service to either Cluster or Local + # externalTrafficPolicy: Cluster + +discoveryService: + type: NodePort + port: 10001 # udp + ## Specify the nodePort value for the LoadBalancer and NodePort service types. + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport + ## + # nodePort: + ## Provide any additional annotations which may be required. This can be used to + ## set the LoadBalancer service type to internal only. + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#internal-load-balancer + ## + annotations: {} + labels: {} + ## Use loadBalancerIP to request a specific static IP, + ## otherwise leave blank + ## + loadBalancerIP: + # loadBalancerSourceRanges: [] + ## Set the externalTrafficPolicy in the Service to either Cluster or Local + # externalTrafficPolicy: Cluster ingress: enabled: false