本地Kuber集群上的Ingress与Direct Nginx部署

时间:2020-05-15 09:01:50

标签: kubernetes kubernetes-ingress

我正在本地服务器上设置kubernetes集群。现在要设置外部流量,我可以在Nodeport后面运行Nginx Ingress,也可以在暴露NodeNode服务的情况下运行Nginx Deployment(Pods)。

我唯一知道的区别是与Ingress,我将获得我不需要的粘性会话。那么我应该选择哪一个?为什么?

除此之外,我对htmls的Nginx缓存也有一个要求(具有清除逻辑)。所以我有Nginx Deplpyment,然后可以使用PVC和PV。但是,如果我使用Nginx Ingress怎么办。它将如何工作。

1 个答案:

答案 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

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