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

最终设计决定权在您,老实说,最好使用入口控制器,因为它提供了更大的灵活性。 我希望这能帮您解决这个问题。