Important
This project is not intended to use for your applications since you have direct access to this config. It's main goal is to convert third-party ingresses to gateway-compatible resources.
We recommend using our helm chart in order to install this project.
helm upgrade --install --namespace i2g --create-namespace i2g oci://ghcr.io/intreecom/charts/i2g-operator -f values.yamlYou can see our values file for helm chart by running this command:
helm show values oci://ghcr.io/intreecom/charts/i2g-operatorSources of the helm chart are located here in our chart museum: https://github.com/Intreecom/charts/
It can be configured using CLI argument or by env variables.
# Log level of the operator
I2G_LOG_LEVEL="info"
# Wether to enable experimental channel for gateway-api
# If it's true, then ingresses that don't have
# `http` in their rules will be translated to TCPRoute
# instead of HTTPRoute.
I2G_EXPERIMENTAL="true"
# Whether to link created resources to the ingress
# which was used as a source for generation.
# It's useful if you want to delete all HTTPRoute and
# TCPRoutes when ingress is being deleted.
I2G_LINK_TO_INGRESS="true"
# Name of the gateway routes will be linked to.
I2G_DEFAULT_GATEWAY_NAME="gw"
# Namespace where gateway is located.
I2G_DEFAULT_GATEWAY_NAMESPACE="default"
# If true, then I2G will be skipping ingresses,
# unless they have `i2g-operator/translate: "true"` annotation.
I2G_SKIP_BY_DEFAULT="false"Also amost all those configuration variables can be overwritten by ingress annotations and there are few annotations with special behaviour.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
# Will create HTTPRoute for each path of each rule.
# This is required for some ingresses, because they
# contain to many path rules.
# HTTPRoute rules can only have 16 match rules at most.
i2g-operator/split-paths: "true"
# If false, will not translate this ingress resource.
i2g-operator/translate: "true"
# Override default gateway's name for generated resources.
i2g-operator/gateway-name: "other-gw"
# Override default gateway's namespace for generated resources.
i2g-operator/gateway-namespace: "my-ns"
# Specify a particular listener name
# for generated routes.
i2g-operator/section-name: "my-section"
# Here's how to add additional matchers.
i2g-operator-matches-header/2: "X-Forwarded-For=1.2.3.4"
# Here's how to add additional matchers.
i2g-operator-matches-query/2: "myQuery~=^(test.hehe|test.memes)"
name: test-ingress
spec:
ingressClassName: nginx
rules:
- host: test.localhost
http:
paths:
- backend:
service:
name: my-svc
port:
number: 3100
path: /api/memes
pathType: Prefix
tls:
- hosts:
- test.localhost
secretName: test-tls-secret
To add additional requrest matchers to HTTPRoute, you can use annotations. Here are two of them:
i2g-operator-matches-header/{weight}i2g-operator-matches-query/{weight}
Basically, you can create multiple rules specifying the weight for ordering. It's useful if you want, for example, craete a rule for additional matches against X-Forwarded-For set by your proxy.
Each rule is a key-value pair where key is header (or queryParam) name and value is it's value. There are 2 ways of matching.
- key=value
- key~=value
The difference is that = rules are translated to Exact match and ~= rules are translated to Regularexpression matches.