external ip

This commit is contained in:
Stavros kois
2023-02-05 14:07:30 +02:00
parent abef1d763a
commit d37d888944
9 changed files with 184 additions and 14 deletions

View File

@@ -42,16 +42,21 @@ tests:
some_policy: PreferDualStack
some_family: IPv6
some_ip: 172.16.20.35
some_other_ip: 10.200.34.53
service:
my-service:
enabled: true
primary: true
type: ClusterIP
clusterIP: "{{ .Values.some_ip }}"
publishNotReadyAddresses: true
ipFamilyPolicy: "{{ .Values.some_policy }}"
ipFamilies:
- IPv4
- "{{ .Values.some_family }}"
externalIPs:
- "{{ .Values.some_other_ip }}"
- 10.200.34.54
ports:
port-name:
enabled: true
@@ -70,7 +75,10 @@ tests:
type: ClusterIP
clusterIP: 172.16.20.35
ipFamilyPolicy: PreferDualStack
publishNotReadyAddresses: false
publishNotReadyAddresses: true
ipFamilies:
- IPv4
- IPv6
externalIPs:
- 10.200.34.53
- 10.200.34.54

View File

@@ -0,0 +1,73 @@
suite: service externalIP test
templates:
- common.yaml
tests:
- it: should pass with type externalIP
set:
service:
my-service:
enabled: true
primary: true
type: ExternalIP
externalName: my-external-name
ports:
port-name:
enabled: true
primary: true
workload:
my-workload:
enabled: true
primary: true
type: Deployment
podSpec: {}
asserts:
- documentIndex: &serviceDoc 1
isKind:
of: Service
- documentIndex: *serviceDoc
isAPIVersion:
of: v1
- documentIndex: *serviceDoc
equal:
path: metadata.name
value: release-name-common-test
- documentIndex: *serviceDoc
equal:
path: spec
value:
publishNotReadyAddresses: false
- it: should pass with type ExternalIP and available options set
set:
some_policy: Local
some_ip: 10.200.34.53
service:
my-service:
enabled: true
primary: true
type: ExternalIP
publishNotReadyAddresses: true
externalTrafficPolicy: "{{ .Values.some_policy }}"
externalIPs:
- "{{ .Values.some_ip }}"
- 10.200.34.54
ports:
port-name:
enabled: true
primary: true
workload:
my-workload:
enabled: true
primary: true
type: Deployment
podSpec: {}
asserts:
- documentIndex: *serviceDoc
equal:
path: spec
value:
externalTrafficPolicy: Local
publishNotReadyAddresses: true
externalIPs:
- 10.200.34.53
- 10.200.34.54

View File

@@ -42,7 +42,9 @@ tests:
- it: should pass with type ExternalName and available options set
set:
some_ip: 172.16.20.35
some_other_ip: 10.200.34.53
some_name: my-external-name
some_policy: Local
service:
my-service:
enabled: true
@@ -50,7 +52,11 @@ tests:
type: ExternalName
clusterIP: "{{ .Values.some_ip }}"
externalName: "{{ .Values.some_name }}"
externalTrafficPolicy: Local
publishNotReadyAddresses: true
externalTrafficPolicy: "{{ .Values.some_policy }}"
externalIPs:
- "{{ .Values.some_other_ip }}"
- 10.200.34.54
ports:
port-name:
enabled: true
@@ -70,4 +76,7 @@ tests:
clusterIP: 172.16.20.35
externalTrafficPolicy: Local
externalName: my-external-name
publishNotReadyAddresses: false
publishNotReadyAddresses: true
externalIPs:
- 10.200.34.53
- 10.200.34.54

View File

@@ -41,6 +41,8 @@ tests:
set:
some_ip: 172.16.20.35
some_other_ip: 10.100.200.45
some_extra_ip: 10.200.34.53
some_policy: Local
some_range: 11.100.200.0/24
some_family: IPv6
service:
@@ -53,11 +55,15 @@ tests:
loadBalancerSourceRanges:
- "{{ .Values.some_range }}"
- 10.100.200.0/24
externalTrafficPolicy: Local
externalTrafficPolicy: "{{ .Values.some_policy }}"
publishNotReadyAddresses: true
ipFamilyPolicy: PreferDualStack
ipFamilies:
- IPv4
- "{{ .Values.some_family }}"
externalIPs:
- "{{ .Values.some_extra_ip }}"
- 10.200.34.54
ports:
port-name:
enabled: true
@@ -81,7 +87,10 @@ tests:
- 10.100.200.0/24
externalTrafficPolicy: Local
ipFamilyPolicy: PreferDualStack
publishNotReadyAddresses: false
publishNotReadyAddresses: true
ipFamilies:
- IPv4
- IPv6
externalIPs:
- 10.200.34.53
- 10.200.34.54

View File

@@ -41,17 +41,23 @@ tests:
set:
some_ip: 172.16.20.35
some_family: IPv6
some_policy: Local
some_other_ip: 10.200.34.53
service:
my-service:
enabled: true
primary: true
type: NodePort
clusterIP: "{{ .Values.some_ip }}"
externalTrafficPolicy: Local
externalTrafficPolicy: "{{ .Values.some_policy }}"
publishNotReadyAddresses: true
ipFamilyPolicy: PreferDualStack
ipFamilies:
- IPv4
- "{{ .Values.some_family }}"
externalIPs:
- "{{ .Values.some_other_ip }}"
- 10.200.34.54
ports:
port-name:
enabled: true
@@ -71,7 +77,10 @@ tests:
clusterIP: 172.16.20.35
externalTrafficPolicy: Local
ipFamilyPolicy: PreferDualStack
publishNotReadyAddresses: false
publishNotReadyAddresses: true
ipFamilies:
- IPv4
- IPv6
externalIPs:
- 10.200.34.53
- 10.200.34.54

View File

@@ -9,6 +9,8 @@
| service.[service-name].annotations | `dict` | ❌ | ✅ (On value only) | `{}` | Additional annotations for service |
| service.[service-name].type | `string` | ❌ | ✅ | `ClusterIP` | Define the service type (ClusterIP, LoadBalancer, NodePort, ExternalIP, ExternalName) |
| service.[service-name].publishNotReadyAddresses | `boolean` | ❌ | ❌ | `false` | Define whether to publishNotReadyAddresses or not |
| service.[service-name].externalIPs | `list` | ❌ | ❌ | | Define externalIPs |
| service.[service-name].externalIPs.[externalIP] | `string` | ✅ | ✅ | | The external IP |
| service.[service-name].sharedKey | `string` | ❌ | ✅ | `$FullName` | Custom Shared Key for MetalLB Annotation |
| service.[service-name].clusterIP | `string` | ❌ | ✅ | | Custom Cluster IP |
| service.[service-name].ipFamilyPolicy | `string` | ❌ | ✅ | | Define the ipFamilyPolicy (SingleStack, PreferDualStack, RequireDualStack) |
@@ -45,9 +47,12 @@ service:
primary: true
publishNotReadyAddresses: true
clusterIP: 172.16.20.233
publishNotReadyAddresses: true
ipFamilyPolicy: SingleStack
ipFamilies:
- IPv4
externalIPs:
- 10.200.230.34
targetSelector: pod-name
ports:
port-name:
@@ -64,9 +69,12 @@ service:
- 10.100.100.0/24
clusterIP: 172.16.20.233
sharedKey: custom-shared-key
publishNotReadyAddresses: true
ipFamilyPolicy: SingleStack
ipFamilies:
- IPv4
externalIPs:
- 10.200.230.34
externalTrafficPolicy: Cluster
targetSelector: pod-name
ports:
@@ -75,6 +83,38 @@ service:
primary: true
container-name: container-name
service-nodeport:
enabled: true
primary: true
type: NodePort
clusterIP: 172.16.20.233
publishNotReadyAddresses: true
externalIPs:
- 10.200.230.34
externalTrafficPolicy: Cluster
targetSelector: pod-name
ports:
port-name:
enabled: true
primary: true
container-name: container-name
service-externalname:
enabled: true
primary: true
type: ExternalName
externalName: external-name
clusterIP: 172.16.20.233
publishNotReadyAddresses: true
externalIPs:
- 10.200.230.34
externalTrafficPolicy: Cluster
ports:
port-name:
enabled: true
primary: true
container-name: container-name
other-service-name:
enabled: true
type: ClusterIP

View File

@@ -14,6 +14,7 @@ objectData: The service data, that will be used to render the Service object.
{{- $svcType := $objectData.type | default "ClusterIP" -}}
{{/* Get Pod Values based on the selector (or the absence of it) */}}
{{/* TODO: handle caes that svcType does not need a pod to link with */}}
{{- $podValues := fromJson (include "ix.v1.common.lib.service.getSelectedPodValues" (dict "rootCtx" $rootCtx "objectData" $objectData)) -}}
{{/* Get Pod's hostNetwork configuration */}}
@@ -74,10 +75,20 @@ spec:
{{- include "ix.v1.common.lib.service.spec.nodePort" (dict "rootCtx" $rootCtx "objectData" $objectData) | trim | nindent 2 }}
{{- else if eq $svcType "ExternalName" -}}
{{- include "ix.v1.common.lib.service.spec.externalName" (dict "rootCtx" $rootCtx "objectData" $objectData) | trim | nindent 2 }}
{{- else if eq $svcType "ExternalIP" -}}
{{- include "ix.v1.common.lib.service.spec.externalIP" (dict "rootCtx" $rootCtx "objectData" $objectData) | trim | nindent 2 }}
{{- end }}
publishNotReadyAddresses: {{ include "ix.v1.common.lib.service.publishNotReadyAddresses" (dict "rootCtx" $rootCtx "objectData" $objectData) | trim }}
{{- with (include "ix.v1.common.lib.service.externalIPs" (dict "rootCtx" $rootCtx "objectData" $objectData) | trim) }}
externalIPs:
{{- . | nindent 2 }}
{{- end -}}
{{/* TODO: sessionAffinity */}}
{{/* TODO: ports */}}
{{- if not (mustHas $svcType (list "ExternalName" "ExternalIP")) }}
selector:
{{- include "ix.v1.common.lib.metadata.selectorLabels" (dict "rootCtx" $rootCtx "podName" $podValues.shortName) | trim | nindent 2 }}
{{- end -}}
{{/* TODO: endpoints */}}
{{- end -}}

View File

@@ -7,13 +7,11 @@ objectData: The service object data
{{- define "ix.v1.common.lib.service.externalIPs" -}}
{{- $rootCtx := .rootCtx -}}
{{- $objectData := .objectData }}
{{- $objectData := .objectData -}}
{{- $publishAddr := false -}}
{{- if (kindIs "bool" $objectData.publishNotReadyAddresses) -}}
{{- $publishAddr = $objectData.publishNotReadyAddresses -}}
{{- with $objectData.externalIPs -}}
{{- range . }}
- {{ tpl . $rootCtx }}
{{- end -}}
{{- end -}}
{{- $publishAddr -}}
{{- end -}}

View File

@@ -0,0 +1,13 @@
{{/* Service - ExternalIP Spec */}}
{{/* Call this template:
{{ include "ix.v1.common.lib.service.spec.externalIP" (dict "rootCtx" $rootCtx "objectData" $objectData) -}}
rootCtx: The root context of the service
objectData: The service object data
*/}}
{{- define "ix.v1.common.lib.service.spec.externalIP" -}}
{{- $rootCtx := .rootCtx -}}
{{- $objectData := .objectData }}
{{- include "ix.v1.common.lib.service.externalTrafficPolicy" (dict "rootCtx" $rootCtx "objectData" $objectData) | trim | nindent 0 }}
{{- end -}}