我正在本地服务器上设置kubernetes集群。现在要设置外部流量,我可以在Nodeport后面运行Nginx Ingress,也可以在暴露NodeNode服务的情况下运行Nginx Deployment(Pods)。
我唯一知道的区别是与Ingress,我将获得我不需要的粘性会话。那么我应该选择哪一个?为什么?
除此之外,我对htmls的Nginx缓存也有一个要求(具有清除逻辑)。所以我有Nginx Deplpyment,然后可以使用PVC和PV。但是,如果我使用Nginx Ingress怎么办。它将如何工作。
答案 0 :(得分:3)
当您公开 Nginx部署时,实际上是使用 Ingress 创建 L4负载平衡器,您正在创建 L7负载平衡器< / strong>。
如果您想托管多个域(例如example1.com,example2.com),那么在拥有L7负载均衡器的情况下就很有意义,如果您希望请求终止于某些特殊服务(例如某些特殊服务或端点),那么也可以定义默认的后端
关于启用缓存的第二部分,您可以在入口控制器中进行以下操作:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: mywebsite
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-buffering: "on" # Important!
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_cache static-cache;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_404 http_500 http_502 http_503 http_504;
proxy_cache_bypass $http_x_purge;
add_header X-Cache-Status $upstream_cache_status;
假设您想为1条路径而不是其他路径启用它,就像您想为/ static / path而不是/ path启用它,那么您可以:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: mysite
annotations:
ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-body-size: 10m
spec:
tls:
- secretName: mysite-ssl
hosts:
- mysite.example.com
rules:
- host: mysite.example.com
http:
paths:
- path: /
backend:
serviceName: mysite
servicePort: http
---
# Leverage nginx-ingress cache for /static/
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: mysite-static
annotations:
nginx.ingress.kubernetes.io/proxy-buffering: "on"
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_cache static-cache;
proxy_cache_valid 404 10m;
proxy_cache_use_stale error timeout updating http_404 http_500 http_502 http_503 http_504;
proxy_cache_bypass $http_x_purge;
add_header X-Cache-Status $upstream_cache_status;
spec:
rules:
- host: mysite.example.com
http:
paths:
- path: /static/
backend:
serviceName: mysite
servicePort: http
最终设计决定权在您自己,老实说,最好使用入口控制器,因为它可以提供更大的灵活性。 我希望这可以为您解决这个问题。