apiVersion: apps/v1 kind: Deployment metadata: name: nginx-mycelium-proxy namespace: default labels: app: nginx-mycelium-proxy role: reverse-proxy spec: replicas: 3 selector: matchLabels: app: nginx-mycelium-proxy template: metadata: labels: app: nginx-mycelium-proxy role: reverse-proxy spec: hostNetwork: true affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - nginx-mycelium-proxy topologyKey: kubernetes.io/hostname containers: - name: nginx-proxy image: nginx:alpine ports: - containerPort: 8080 hostPort: 8080 - containerPort: 8081 hostPort: 8081 - containerPort: 8082 hostPort: 8082 volumeMounts: - name: proxy-conf mountPath: /etc/nginx/conf.d/default.conf - name: proxy-html mountPath: /usr/share/nginx/html resources: requests: memory: "32Mi" cpu: "100m" limits: memory: "64Mi" cpu: "200m" livenessProbe: httpGet: path: / port: 8080 initialDelaySeconds: 5 periodSeconds: 10 volumes: - name: proxy-conf configMap: name: nginx-proxy-conf - name: proxy-html configMap: name: nginx-proxy-html --- apiVersion: v1 kind: ConfigMap metadata: name: nginx-proxy-conf namespace: default data: default.conf: | upstream backend { server nginx-mycelium.default.svc.cluster.local:80; } server { listen 8080; server_name _; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } server { listen 8081; server_name _; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } server { listen 8082; server_name _; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } --- apiVersion: v1 kind: ConfigMap metadata: name: nginx-proxy-html namespace: default data: index.html: |
This nginx reverse proxy is forwarding requests to the internal nginx-mycelium service!
The reverse proxy approach provides true global access while maintaining Kubernetes load balancing.
Test the reverse proxy from anywhere:
http://[51d:3596:6cc3:81e7:ff0f:d546:3737:4c8c]:8080http://[476:c4f:b4cb:7205:ff0f:f56e:abea:6905]:8080http://[538:964a:a1e1:4057:ff0f:63c7:960b:7c27]:8081http://[552:5984:2d97:72dc:ff0f:39ef:6ec:a48c]:8081http://[437:9faf:1f1a:e2b1:ff0f:1fd9:7fd5:1095]:8082http://[5c3:a162:45ab:6c53:ff0f:8c55:36b0:24af]:8082All requests are forwarded to internal nginx-mycelium service with load balancing!
Mycelium Cloud • Reverse Proxy Architecture • Global Web Hosting 🌍