簡體   English   中英

Kubernetes (AKS) 多個 Nginx 入口控制器

[英]Kubernetes (AKS) Multiple Nginx Ingress Controllers

我在 AKS 中設置了一個集群,需要安裝第二個 Nginx Ingress 控制器,以便我們可以使用本地而不是集群 IP 來管理源 IP。

參考:

https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typeloadbalancer

我知道如何執行上述操作,但我對如何從清單中部署需要在該入口控制器上運行的服務感到困惑。 我使用 helm 來安排我的部署。 下面是我如何在我們的管道中安裝當前使用 Ansible 的入口控制器的示例:

  - name: Create NGINX Load Balancer (Internal) w/ IP {{ aks_load_balancer_ip }}
    command: >
      helm upgrade platform ingress-nginx/ingress-nginx -n kube-system
      --set controller.service.loadBalancerIP="{{ aks_load_balancer_ip }}"
      --set controller.service.annotations."service\.beta\.kubernetes\.io\/azure-load-balancer-internal"="true"
      --set controller.replicaCount="{{ nginx_replica_count }}"
      --version {{ nginx_chart_ver }}
      --install

我在這里知道,我需要設置一些值來更改元數據名稱等,因為我們使用的是來自 bitnami 的圖表。

下面是我的 Ingress 圖表的示例:


apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: {{ template "service.fullname" . }}
  labels:
    app: {{ template "service.name" . }}
    chart: {{ template "service.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/proxy-body-size: {{ .Values.ingress.proxy_body_size }}
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/add-base-url: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "{{ .Values.ingress.proxy_read_timeout }}"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "{{ .Values.ingress.proxy_send_timeout }}"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "{{ .Values.ingress.proxy_connect_timeout }}"
spec:
  tls:
    - hosts:
        - "{{ .Values.service_url }}"
      secretName: tls-secret
  rules:
  - host: "{{ .Values.service_url }}"
    http:
      paths:
      - pathType: Prefix
        path: "/?(.*)"
        backend:
          service:
            name: {{ template "service.name" . }}
            port:
              number: {{ .Values.service.port }}


我不確定是否應該在入口中應用注釋來定義分配給哪個入口控制器。

我在讀這個: https ://kubernetes.io/docs/reference/kubernetes-api/service-resources/ingress-v1/#IngressSpec

並且覺得我只需要在規范下添加它並定義負載均衡器的名稱? 任何援助將不勝感激。

解決方案:

我能夠自己解決這個問題,我使用以下邏輯創建了兩個入口:

      helm install nginx-two ingress-nginx/ingress-nginx -n kube-system \
      --set controller.replicaCount=2 \
      --set controller.service.loadBalancerIP="10.24.1.253" \
      --set controller.ingressClassResource.name=nginx-two \
      --set controller.ingressClass="nginx-two" \
      --set controller.service.annotations."service\.beta\.kubernetes\.io\/azure-load-balancer-internal"="true" \
      --version {{ nginx_chart_ver }}
      --install

      helm install nginx-oneingress-nginx/ingress-nginx -n kube-system \
      --set controller.replicaCount=2 \
      --set controller.service.loadBalancerIP="10.24.1.254" \
      --set controller.ingressClassResource.name=nginx-one \
      --set controller.ingressClass="nginx-one" \
      --set controller.service.annotations."service\.beta\.kubernetes\.io\/azure-load-balancer-internal"="true" \
      --version {{ nginx_chart_ver }}
      --install

然后我可以通過將注釋更新為名稱來在我的入口圖表中引用它。 如果我想要入口控制器,我確信可以通過定義命名空間來進一步解決這個問題,但我需要先更新我的 PSP。

工作入口示例:


apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: {{ template "service.fullname" . }}
  labels:
    app: {{ template "service.name" . }}
    chart: {{ template "service.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
  annotations:
    kubernetes.io/ingress.class: "nginx-two"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM