functions/helm/InstallLoadBalancerHelmPackage.ps1
<#
.SYNOPSIS InstallLoadBalancerHelmPackage .DESCRIPTION InstallLoadBalancerHelmPackage .INPUTS InstallLoadBalancerHelmPackage - The name of InstallLoadBalancerHelmPackage .OUTPUTS None .EXAMPLE InstallLoadBalancerHelmPackage .EXAMPLE InstallLoadBalancerHelmPackage #> function InstallLoadBalancerHelmPackage() { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [AllowEmptyString()] [string] $ExternalIP , [Parameter(Mandatory = $true, HelpMessage="Set this if you want to put the external load balancer in a subnet")] [AllowEmptyString()] [string] $ExternalSubnet , [Parameter(Mandatory = $true)] [AllowEmptyString()] [string] $InternalIP , [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $InternalSubnet ) Write-Verbose 'InstallLoadBalancerHelmPackage: Starting' [string] $package = "nginx" [string] $packageInternal = "nginx-internal" [string] $ngniximageTag = "0.20.0" Write-Output "Removing old deployment" DeleteHelmPackage -package $package DeleteHelmPackage -package $packageInternal Start-Sleep -Seconds 5 # nginx configuration: https://github.com/helm/charts/tree/master/stable/nginx-ingress#configuration if(![string]::IsNullOrWhiteSpace($ExternalSubnet)){ Write-Verbose "Installing the external nginx load balancer into subnet $ExternalSubnet" helm install stable/nginx-ingress ` --namespace "kube-system" ` --name "$package" ` --set controller.stats.enabled=true ` --set controller.extraArgs.enable-ssl-passthrough="" ` --set controller.image.tag="$ngniximageTag" ` --set-string controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-internal"='"true"' ` --set-string controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-internal-subnet"='"'$ExternalSubnet'"' ` --set controller.service.loadBalancerIP="$ExternalIP" ` --set-string controller.service.labels."$($kubeGlobals.externalLoadBalancerLabel)"='"'$($kubeGlobals.externalLoadBalancerLabelValue)'"' ` --set controller.extraArgs.default-ssl-certificate="kube-system/fabric-ssl-cert" } else { Write-Verbose "Installing the external nginx load balancer into public internet" helm install stable/nginx-ingress ` --namespace "kube-system" ` --name "$package" ` --set controller.stats.enabled=true ` --set controller.extraArgs.enable-ssl-passthrough="" ` --set controller.image.tag="$ngniximageTag" ` --set controller.service.loadBalancerIP="$ExternalIP" ` --set-string controller.service.labels."$($kubeGlobals.externalLoadBalancerLabel)"='"'$($kubeGlobals.externalLoadBalancerLabelValue)'"' ` --set controller.extraArgs.default-ssl-certificate="kube-system/fabric-ssl-cert" } # setting values in helm: https://github.com/helm/helm/blob/master/docs/chart_best_practices/values.md # and https://github.com/helm/helm/blob/master/docs/using_helm.md # use "helm inspect values" to see values WaitForLoadBalancerIPByLabel -loadBalancerLabel $kubeGlobals.externalLoadBalancerLabel Write-Verbose "Installing the internal nginx load balancer" # NOTE: helm cannot handle spaces before or after "=" in --set command helm install stable/nginx-ingress ` --namespace "kube-system" ` --name "$packageInternal" ` --set controller.image.tag="$ngniximageTag" ` --set-string controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-internal"='"true"' ` --set-string controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-internal-subnet"='"'$InternalSubnet'"' ` --set controller.service.loadBalancerIP="$InternalIP" ` --set-string controller.service.labels."$($kubeGlobals.internalLoadBalancerLabel)"='"'$($kubeGlobals.internalLoadBalancerLabelValue)'"' ` --set controller.extraArgs.default-ssl-certificate="kube-system/fabric-ssl-cert" Write-Verbose 'InstallLoadBalancerHelmPackage: Done' } Export-ModuleMember -Function "InstallLoadBalancerHelmPackage" |