From a160e45ff3b376832f8a4698b50e495c6c582e56 Mon Sep 17 00:00:00 2001 From: Gitea Actions Date: Thu, 14 Aug 2025 09:55:04 +0000 Subject: [PATCH] Auto-update blog content from Obsidian: 2025-08-14 09:55:04 --- content/post/deploy kub application.md | 104 ++++++------------ ...controller-nginx-test-simple-webserver.png | Bin 0 -> 41012 bytes ...nsense-caddy-create-layer4-route-http.png} | Bin 3 files changed, 34 insertions(+), 70 deletions(-) create mode 100644 static/img/ingress-controller-nginx-test-simple-webserver.png rename static/img/{Pasted_image_20250803215654.png => opnsense-caddy-create-layer4-route-http.png} (100%) diff --git a/content/post/deploy kub application.md b/content/post/deploy kub application.md index 2eb691c..f7624ec 100644 --- a/content/post/deploy kub application.md +++ b/content/post/deploy kub application.md @@ -349,12 +349,10 @@ On its own, an Ingress is just a set of routing rules. It doesn’t actually han - Opens HTTP(S) ports on a `LoadBalancer` or `NodePort` service. - Routes traffic to the correct `Service` based on the `Ingress` rules. -Think of it as a reverse proxy (like NGINX or Traefik), but integrated with Kubernetes. - -Since I’m looking for something simple, stable, well-maintained, and with a large community, I went with **NGINX Ingress Controller**. +Popular controllers include NGINX, Traefik, HAProxy, and more. Since I was looking for something simple, stable, and widely adopted, I picked the **NGINX Ingress Controller**. ### Install NGINX Ingress Controller -I install it using Helm, I set `controller.ingressClassResource.default=true` to define `nginx` as default for all my future ingresses: +I used Helm to install the controller, and I set `controller.ingressClassResource.default=true` so that all my future ingresses use it by default: ```bash helm install ingress-nginx \ --repo=https://kubernetes.github.io/ingress-nginx \ @@ -362,95 +360,52 @@ helm install ingress-nginx \ --create-namespace ingress-nginx \ --set controller.ingressClassResource.default=true ``` -```plaintext -NAME: ingress-nginx -LAST DEPLOYED: Wed Jul 23 15:44:47 2025 -NAMESPACE: ingress-nginx -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The ingress-nginx controller has been installed. -It may take a few minutes for the load balancer IP to be available. -You can watch the status by running 'kubectl get service --namespace ingress-nginx ingress-nginx-controller --output wide --watch' -An example Ingress that makes use of the controller: - apiVersion: networking.k8s.io/v1 - kind: Ingress - metadata: - name: example - namespace: foo - spec: - ingressClassName: nginx - rules: - - host: www.example.com - http: - paths: - - pathType: Prefix - backend: - service: - name: exampleService - port: - number: 80 - path: / - # This section is only required if TLS is to be enabled for the Ingress - tls: - - hosts: - - www.example.com - secretName: example-tls - -If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided: - - apiVersion: v1 - kind: Secret - metadata: - name: example-tls - namespace: foo - data: - tls.crt: - tls.key: -``` - -My NGINX Ingress Controller is now installed and its service picked the 2nd IP in the load balancer range, `192.168.55.21`: +The controller is deployed and exposes a `LoadBalancer` service. In my setup, it picked the second available IP in the BGP range: ```bash NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR ingress-nginx-controller LoadBalancer 10.106.236.13 192.168.55.21 80:31195/TCP,443:30974/TCP 75s app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx ``` ->💡 I want to make sure my controller will always pick the same IP. +### Reserving a Static IP for the Controller -I will create 2 separate pools, one dedicated for the Ingress Controller with only one IP, and another one for anything else. +I want to make sure the Ingress Controller always receives the same IP address. To do this, I created **two separate Cilium IP pools**: +- One dedicated for the Ingress Controller with a single IP. +- One for everything else. ```yaml --- -apiVersion: "cilium.io/v2alpha1" +# Pool for Ingress Controller +apiVersion: cilium.io/v2alpha1 kind: CiliumLoadBalancerIPPool metadata: - name: "ingress-nginx" + name: ingress-nginx spec: blocks: - - cidr: "192.168.55.55/32" # Ingress Controller IP + - cidr: 192.168.55.55/32 serviceSelector: matchLabels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/component: controller --- -apiVersion: "cilium.io/v2alpha1" +# Default pool for other services +apiVersion: cilium.io/v2alpha1 kind: CiliumLoadBalancerIPPool metadata: - name: "default" + name: default spec: blocks: - - start: "192.168.55.100" # LB Start IP - stop: "192.168.55.250" # LB Stop IP + - start: 192.168.55.100 + stop: 192.168.55.250 serviceSelector: - matchExpressions: - - key: app.kubernetes.io/name - operator: NotIn - values: - - ingress-nginx + matchExpressions: + - key: app.kubernetes.io/name + operator: NotIn + values: + - ingress-nginx + ``` -After replacing the previous pool by these two, my Ingress Controller got the desired IP `192.168.55.55` and my `test-lb` service picked the first one `192.168.55.100` in the new range as expected. +After replacing the previous shared pool with these two, the Ingress Controller got the desired IP `192.168.55.55`, and the `test-lb` service picked `192.168.55.100` as expected: ```bash NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default test-lb LoadBalancer 10.100.167.198 192.168.55.100 80:31350/TCP 6h34m @@ -461,7 +416,7 @@ ingress-nginx ingress-nginx-controller LoadBalancer 10.106.236.1 Now let’s wire up a service to this controller. -We transform our `LoadBalancer` service to a standard `ClusterIP` and add a minimal Ingress definition to expose my test pod over HTTP: +First, I update the original `LoadBalancer` service and convert it into a `ClusterIP` (since the Ingress Controller will now expose it externally): ```yaml --- apiVersion: v1 @@ -495,8 +450,17 @@ spec: number: 80 ``` +Then I apply the `Ingress` manifest as shown earlier to expose the service over HTTP. -![Pasted_image_20250803215654.png](img/Pasted_image_20250803215654.png) +Since I'm using the Caddy plugin on OPNsense, I still need a local Layer 4 route to forward traffic for `test.vezpi.me` to the NGINX Ingress Controller IP (`192.168.55.55`). I simply create a new rule in the Caddy plugin. + +![Create Layer4 router in Caddy plugin for OPNsense](img/opnsense-caddy-create-layer4-route-http.png) + +Now let’s test it in the browser: +![ ](img/ingress-controller-nginx-test-simple-webserver.png) +Test Ingress on HTTP + +✅ Our pod is now reachable on its HTTP URL using an Ingress. Second step complete! --- ## Secure Connection with TLS diff --git a/static/img/ingress-controller-nginx-test-simple-webserver.png b/static/img/ingress-controller-nginx-test-simple-webserver.png new file mode 100644 index 0000000000000000000000000000000000000000..bb0d1b8c74038490a31df31544deeaac75b1207e GIT binary patch literal 41012 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 literal 0 HcmV?d00001 diff --git a/static/img/Pasted_image_20250803215654.png b/static/img/opnsense-caddy-create-layer4-route-http.png similarity index 100% rename from static/img/Pasted_image_20250803215654.png rename to static/img/opnsense-caddy-create-layer4-route-http.png