kubernetes: added additional ingress controller for internal access
- added additional traefik ingress controller for accessing internal services via ingress.
This commit is contained in:
@ -1,6 +1,6 @@
|
|||||||
# Setup K3s Kubernetes Cluster
|
# Setup K3s Kubernetes Cluster
|
||||||
|
|
||||||
# Configure Traefik with extra values
|
# Configure Traefik Ingress Controller
|
||||||
|
|
||||||
The Traefik ingress controller is deployed along with K3s. To modify the
|
The Traefik ingress controller is deployed along with K3s. To modify the
|
||||||
default values,
|
default values,
|
||||||
@ -12,6 +12,26 @@ helm upgrade traefik traefik/traefik \
|
|||||||
--version 22.1.0
|
--version 22.1.0
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Additional Ingress Controller for Internal Access
|
||||||
|
|
||||||
|
An additional ingress controller is deployed for internal access to services.
|
||||||
|
This ingress controller is used to access services that are not exposed to the
|
||||||
|
internet. It is deployed in the `internal-ingress` namespace and uses the
|
||||||
|
Traefik ingress controller.
|
||||||
|
|
||||||
|
To utilize the internal ingress controller, add the following
|
||||||
|
`ingressClassName: traefik-internal` under ingress spec.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm upgrade --install \
|
||||||
|
--create-namespace traefik-internal traefik/traefik \
|
||||||
|
--namespace traefik-internal \
|
||||||
|
-f traefik/traefik-internal/values.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
The LoadBalancer service IP for the internal ingress controller is added to
|
||||||
|
the adGuard DNS server to resolve the internal services.
|
||||||
|
|
||||||
# Configure Cert Manager for automating SSL certificate handling
|
# Configure Cert Manager for automating SSL certificate handling
|
||||||
|
|
||||||
Cert manager handles SSL certificate creation and renewal from Let's Encrypt.
|
Cert manager handles SSL certificate creation and renewal from Let's Encrypt.
|
||||||
@ -50,11 +70,11 @@ export KUBE_EDITOR=nvim
|
|||||||
kubectl -n kube-system edit configmap coredns
|
kubectl -n kube-system edit configmap coredns
|
||||||
```
|
```
|
||||||
|
|
||||||
Next, deploy the ClusterIssuer, WildcardCert, and secrets using helm
|
Next, deploy the ClusterIssuer, WildcardCert, and secrets using helm chart.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
source .env
|
source .env
|
||||||
helm install cert-handler cert-manager-helm-chart \
|
helm install cert-handler cert-manager-config-helm-chart \
|
||||||
--atomic --set secret.apiToken=$CLOUDFLARE_TOKEN \
|
--atomic --set secret.apiToken=$CLOUDFLARE_TOKEN \
|
||||||
--set clusterIssuer.email=$EMAIL \
|
--set clusterIssuer.email=$EMAIL \
|
||||||
--set wildcardCert.dnsNames[0]=$DNSNAME
|
--set wildcardCert.dnsNames[0]=$DNSNAME
|
||||||
|
|||||||
@ -14,7 +14,7 @@ ingress:
|
|||||||
enabled: true
|
enabled: true
|
||||||
annotations:
|
annotations:
|
||||||
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
cert-manager.io/issuer: "letsencrypt-prod"
|
cert-manager.io/cluster-issuer: "acme-issuer"
|
||||||
tls:
|
tls:
|
||||||
enabled: true
|
enabled: true
|
||||||
host: "*.example.com"
|
host: "*.example.com"
|
||||||
|
|||||||
@ -63,7 +63,7 @@ server:
|
|||||||
enabled: true
|
enabled: true
|
||||||
annotations:
|
annotations:
|
||||||
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
cert-manager.io/issuer: "letsencrypt-prod"
|
cert-manager.io/cluster-issuer: "acme-issuer"
|
||||||
hosts:
|
hosts:
|
||||||
- host: placeholder.immich.app
|
- host: placeholder.immich.app
|
||||||
paths:
|
paths:
|
||||||
|
|||||||
@ -494,11 +494,11 @@ ingress:
|
|||||||
pathType: Prefix
|
pathType: Prefix
|
||||||
console:
|
console:
|
||||||
enabled: true
|
enabled: true
|
||||||
ingressClassName: "traefik"
|
ingressClassName: "traefik-internal"
|
||||||
labels: {}
|
labels: {}
|
||||||
annotations:
|
annotations:
|
||||||
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
cert-manager.io/issuer: "letsencrypt-prod"
|
cert-manager.io/cluster-issuer: "acme-issuer"
|
||||||
traefik.ingress.kubernetes.io/service.serversTransport: insecure-transport
|
traefik.ingress.kubernetes.io/service.serversTransport: insecure-transport
|
||||||
traefik.ingress.kubernetes.io/router.middlewares: kube-system-ip-whitelist@kubernetescrd
|
traefik.ingress.kubernetes.io/router.middlewares: kube-system-ip-whitelist@kubernetescrd
|
||||||
tls:
|
tls:
|
||||||
|
|||||||
@ -44,7 +44,7 @@ metadata:
|
|||||||
name: portfolio
|
name: portfolio
|
||||||
annotations:
|
annotations:
|
||||||
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
cert-manager.io/issuer: "letsencrypt-prod"
|
cert-manager.io/cluster-issuer: "acme-issuer"
|
||||||
spec:
|
spec:
|
||||||
tls:
|
tls:
|
||||||
- hosts:
|
- hosts:
|
||||||
|
|||||||
6
kubernetes/traefik/traefik-internal/values.yaml
Normal file
6
kubernetes/traefik/traefik-internal/values.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
ingressClass:
|
||||||
|
enabled: true
|
||||||
|
isDefaultClass: false
|
||||||
|
name: traefik-internal
|
||||||
|
additionalArguments:
|
||||||
|
- "--providers.kubernetesingress.ingressclass=traefik-internal"
|
||||||
@ -2,9 +2,10 @@ apiVersion: traefik.io/v1alpha1
|
|||||||
kind: Middleware
|
kind: Middleware
|
||||||
metadata:
|
metadata:
|
||||||
name: ip-whitelist
|
name: ip-whitelist
|
||||||
namespace: minio
|
namespace: kube-system
|
||||||
spec:
|
spec:
|
||||||
ipWhiteList:
|
ipWhiteList:
|
||||||
sourceRange:
|
sourceRange:
|
||||||
- 192.168.1.0/24
|
- 10.0.0.0/8
|
||||||
- 87.92.7.212/32
|
- 172.16.0.0/12
|
||||||
|
- 192.168.0.0/16
|
||||||
|
|||||||
Reference in New Issue
Block a user