Ingress 与本地 Kuber 集群上的直接 Nginx 部署
Ingress vs Direct Nginx Deployment on On-premise Kuber Cluster
我正在本地服务器中设置一个 kubernetes 集群。现在为了设置外部流量,我可以 运行 Nginx Ingress behind Nodeport 或者我可以 运行 Nginx Deployment(Pods) with NodePort service exposed.
我知道的唯一区别是 Ingress,我会得到无论如何都不需要的粘性会话。那么我应该更喜欢哪一个,为什么?
除此之外,我对 Nginx Caching of htmls(具有清除逻辑)还有一个要求。所以我有Nginx Deplpyment,然后我可以使用PVC和PV。但是如果我使用 Nginx Ingress 呢?那怎么操作呢
当您公开 Nginx 部署 时,您实际上创建了一个 L4 负载均衡器 和 Ingress您正在创建一个 L7 负载平衡器。
如果您想托管多个域,例如 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/ 路径而不是 / 路径启用它,那么您可以:
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
最终设计决定权在您,老实说,最好使用入口控制器,因为它提供了更大的灵活性。
我希望这能帮您解决这个问题。
我正在本地服务器中设置一个 kubernetes 集群。现在为了设置外部流量,我可以 运行 Nginx Ingress behind Nodeport 或者我可以 运行 Nginx Deployment(Pods) with NodePort service exposed.
我知道的唯一区别是 Ingress,我会得到无论如何都不需要的粘性会话。那么我应该更喜欢哪一个,为什么?
除此之外,我对 Nginx Caching of htmls(具有清除逻辑)还有一个要求。所以我有Nginx Deplpyment,然后我可以使用PVC和PV。但是如果我使用 Nginx Ingress 呢?那怎么操作呢
当您公开 Nginx 部署 时,您实际上创建了一个 L4 负载均衡器 和 Ingress您正在创建一个 L7 负载平衡器。
如果您想托管多个域,例如 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/ 路径而不是 / 路径启用它,那么您可以:
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
最终设计决定权在您,老实说,最好使用入口控制器,因为它提供了更大的灵活性。 我希望这能帮您解决这个问题。