@ -54,6 +54,8 @@ const (
IgnorefileName = ".helmignore"
// IngressFileName is the name of the example ingress file.
IngressFileName = TemplatesDir + sep + "ingress.yaml"
// HTTPRouteFileName is the name of the example HTTPRoute file.
HTTPRouteFileName = TemplatesDir + sep + "httproute.yaml"
// DeploymentName is the name of the example deployment file.
DeploymentName = TemplatesDir + sep + "deployment.yaml"
// ServiceName is the name of the example service file.
@ -177,6 +179,44 @@ ingress:
# hosts :
# - chart - example . local
# -- Expose the service via gateway - api HTTPRoute
# Requires Gateway API resources and suitable controller installed within the cluster
# ( see : https : //gateway-api.sigs.k8s.io/guides/)
httpRoute :
# HTTPRoute enabled .
enabled : false
# HTTPRoute annotations .
annotations : { }
# Which Gateways this Route is attached to .
parentRefs :
- name : gateway
sectionName : http
# namespace : default
# Hostnames matching HTTP header .
hostnames :
- chart - example . local
# List of rules and filters applied .
rules :
- matches :
- path :
type : PathPrefix
value : / headers
# filters :
# - type : RequestHeaderModifier
# requestHeaderModifier :
# set :
# - name : My - Overwrite - Header
# value : this - is - the - only - value
# remove :
# - User - Agent
# - matches :
# - path :
# type : PathPrefix
# value : / echo
# headers :
# - name : version
# value : v2
resources : { }
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user . This also increases chances charts run on environments with little
@ -297,6 +337,46 @@ spec:
{ { - end } }
`
const defaultHTTPRoute = ` { { - if . Values . httpRoute . enabled - } }
{ { - $ fullName := include "<CHARTNAME>.fullname" . - } }
{ { - $ svcPort := . Values . service . port - } }
apiVersion : gateway . networking . k8s . io / v1
kind : HTTPRoute
metadata :
name : { { $ fullName } }
labels :
{ { - include "<CHARTNAME>.labels" . | nindent 4 } }
{ { - with . Values . httpRoute . annotations } }
annotations :
{ { - toYaml . | nindent 4 } }
{ { - end } }
spec :
parentRefs :
{ { - with . Values . httpRoute . parentRefs } }
{ { - toYaml . | nindent 4 } }
{ { - end } }
{ { - with . Values . httpRoute . hostnames } }
hostnames :
{ { - toYaml . | nindent 4 } }
{ { - end } }
rules :
{ { - range . Values . httpRoute . rules } }
{ { - with . matches } }
- matches :
{ { - toYaml . | nindent 8 } }
{ { - end } }
{ { - with . filters } }
filters :
{ { - toYaml . | nindent 8 } }
{ { - end } }
backendRefs :
- name : { { $ fullName } }
port : { { $ svcPort } }
weight : 1
{ { - end } }
{ { - end } }
`
const defaultDeployment = ` apiVersion : apps / v1
kind : Deployment
metadata :
@ -444,7 +524,20 @@ spec:
`
const defaultNotes = ` 1. Get the application URL by running these commands :
{ { - if . Values . ingress . enabled } }
{ { - if . Values . httpRoute . enabled } }
{ { - if . Values . httpRoute . hostnames } }
export APP_HOSTNAME = { { . Values . httpRoute . hostnames | first } }
{ { - else } }
export APP_HOSTNAME = $ ( kubectl get -- namespace { { ( first . Values . httpRoute . parentRefs ) . namespace | default . Release . Namespace } } gateway / { { ( first . Values . httpRoute . parentRefs ) . name } } - o jsonpath = "{.spec.listeners[0].hostname}" )
{ { - end } }
{ { - if and . Values . httpRoute . rules ( first . Values . httpRoute . rules ) . matches ( first ( first . Values . httpRoute . rules ) . matches ) . path . value } }
echo "Visit http://$APP_HOSTNAME{{ (first (first .Values.httpRoute.rules).matches).path.value }} to use your application"
NOTE : Your HTTPRoute depends on the listener configuration of your gateway and your HTTPRoute rules .
The rules can be set for path , method , header and query parameters .
You can check the gateway configuration with ' kubectl get -- namespace { { ( first . Values . httpRoute . parentRefs ) . namespace | default . Release . Namespace } } gateway / { { ( first . Values . httpRoute . parentRefs ) . name } } - o yaml '
{ { - end } }
{ { - else if . Values . ingress . enabled } }
{ { - range $ host := . Values . ingress . hosts } }
{ { - range . paths } }
http { { if $ . Values . ingress . tls } } s { { end } } : //{{ $host.host }}{{ .path }}
@ -658,6 +751,11 @@ func Create(name, dir string) (string, error) {
path : filepath . Join ( cdir , IngressFileName ) ,
content : transform ( defaultIngress , name ) ,
} ,
{
// httproute.yaml
path : filepath . Join ( cdir , HTTPRouteFileName ) ,
content : transform ( defaultHTTPRoute , name ) ,
} ,
{
// deployment.yaml
path : filepath . Join ( cdir , DeploymentName ) ,