Am configurat un mediu K3S Kubernetes în laboratorul meu privat de acasă pe Raspberry PI pentru a mă învăța ceva Kubernetes (Noob-Alert), folosind NGINX ca controler de intrare și sunt oarecum blocat să transmit IP-ul real al solicitărilor către podurile țintă, în cazul meu o instanță Nextcloud. Versiunea K3S este v1.22.5+k3s1
.
K3S a fost configurat folosind Docker ca timp de rulare a containerului și cu --no-deploy traefik
opțiune.
După aceea am implementat NGINX Ingress Controller folosind
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/baremetal/deploy.yaml
Apoi, după implementarea podurilor Nextcloud, am implementat Ingress:
apiVersion: networking.k8s.io/v1
fel: Intrare
metadate:
nume: nginx-ingress
adnotari:
nginx.ingress.kubernetes.io/force-ssl-redirect: „adevărat”
specificație:
tls:
- gazde:
- my.own-dns.org
secretName: foarte-secret-ssl-secret
ingressClassName: nginx
reguli:
- gazdă: my.own-dns.org
http:
trasee:
- cale: /o cale
pathType: Prefix
backend:
serviciu:
nume: someservice-service
port:
număr: 8081
- cale: /
pathType: Prefix
backend:
serviciu:
nume: nextcloud-service
port:
număr: 80
În implementarea IngressController, am adăugat următoarele intrări în ConfigMap:
apiVersion: v1
fel: ConfigMap
metadate:
etichete:
helm.sh/chart: ingress-nginx-4.0.10
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/versiunea: 1.1.0
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: controller
nume: ingress-nginx-controller
spațiu de nume: ingress-nginx
date:
allow-snippet-annotations: „adevărat”
compute-full-forwarded-for: „adevărat”
use-forwarded-headers: „adevărat”
enable-real-ip: „adevărat”
proxy-add-original-uri-header: „adevărat”
forwarded-for-header: „X-Forwarded-For”
și a schimbat ServiceType din serviciul http în Echilibrarea greutății
, deci Serviciul meu al IngressController arată astfel:
apiVersion: v1
fel: Serviciu
metadate:
adnotari:
etichete:
helm.sh/chart: ingress-nginx-4.0.10
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/versiunea: 1.1.0
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: controller
nume: ingress-nginx-controller
spațiu de nume: ingress-nginx
specificație:
tip: LoadBalancer
ipFamilyPolicy: SingleStack
ipFamilies:
- IPv4
porturi:
- nume: http
port: 80
protocol: TCP
targetPort: http
appProtocol: http
- nume: https
port: 443
protocol: TCP
targetPort: https
appProtocol: https
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/component: controller
Până acum, e bine, accesarea instanței Nextcloud de pe Internet funcționează grozav, inclusiv redirecționarea către https, etc. Dar jurnalul de audit Nextcloud primește doar un IP intern al clusterului ca IP sursă (în mod surprinzător, nicio IP de la niciun serviciu pe care îl rulez în interiorul clusterului). ), nu realul din lumea exterioară.
Deci ce îmi lipsește? Am încercat să setez utilizați-proxy-protocol
la adevărat, dar acest lucru are ca rezultat a ERR_CONNECTION_RESET
.