Skip to content

Instantly share code, notes, and snippets.

@bechampion
Created May 17, 2022 13:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bechampion/3952b908aee7d1258b13fbf1f961d851 to your computer and use it in GitHub Desktop.
Save bechampion/3952b908aee7d1258b13fbf1f961d851 to your computer and use it in GitHub Desktop.
./Makefile
.PHONY: default
default: template
template:
helm template gce-ingress/ -f gce-ingress/values.yaml
./gce-ingress/templates/backend.yaml
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
name: {{ .Values.backend.name }}
spec:
sessionAffinity:
affinityType: {{ .Values.backend.sessionAffinity.affinityType }}
affinityCookieTtlSec: {{ .Values.backend.sessionAffinity.affinityCookieTtlSec }}
securityPolicy:
name: {{ .Values.backend.securityPolicy.name }}
./gce-ingress/templates/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ .Values.ingress.name }}
annotations:
kubernetes.io/ingress.class: {{ .Values.ingress.class | quote }}
spec:
rules:
- http:
paths:
{{- range .Values.ingress.paths }}
- path: {{ .path }}
pathType: {{ .pathType }}
backend:
service:
name: {{ .backend.service.name }}
port:
number: {{ .backend.service.port.number }}
{{- end }}
./gce-ingress/templates/_helpers.tpl
{{/*
Expand the name of the chart.
*/}}
{{- define "gce-ingress.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "gce-ingress.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "gce-ingress.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "gce-ingress.labels" -}}
helm.sh/chart: {{ include "gce-ingress.chart" . }}
{{ include "gce-ingress.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "gce-ingress.selectorLabels" -}}
app.kubernetes.io/name: {{ include "gce-ingress.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "gce-ingress.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "gce-ingress.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}
./gce-ingress/Chart.yaml
apiVersion: v2
name: gce-ingress
description: Chart to create native ingresses using gce annotations
type: application
version: 0.1.0
appVersion: 1.16.0
./gce-ingress/values.yaml
backend:
name: "mybackend"
sessionAffinity:
affinityType: "GENERATED_COOKIE"
affinityCookieTtlSec: 50
securityPolicy:
name: "mgcp-1192365-ipsos-ghec-dev-demo-policy"
ingress:
name: "myingress"
class: "gce"
paths:
- path: "/demo"
pathType: "ImplementationSpecific"
backend:
service:
name: "service"
port:
number: 80
- path: "/demo2"
pathType: "ImplementationSpecific"
backend:
service:
name: "service"
port:
number: 80
./gce-ingress/.helmignore
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment