![](/img/trans.png)
[英]ERR_TOO_MANY_REDIRECTS for Minio via NGINX Ingress Controller
[英]Why these ingress rules don't expose a service to outside? (NET::ERR_CERT_AUTHORITY_INVALID/ERR_TOO_MANY_REDIRECTS)
我正在嘗試設置並向集群外部公開服務 (ArgoCD)。 注意:我對 Kubernetes 還很陌生,所以很可能我有一些誤解。 如果你能看到一個,請幫我擺脫它。 如果需要更多信息來診斷正在發生的事情,請告訴我,我會添加它。
我在命名空間nginx
的集群中安裝了 nginx-ingress 入口控制器。 我已經通過 helm 將argocd
安裝到argocd
命名空間 * 中。 kubectl get service -n argocd
顯示(省略 AGE 列):
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
projectname-argocd-application-controller ClusterIP 10.100.249.133 <none> 8082/TCP
projectname-argocd-dex-server ClusterIP 10.100.80.187 <none> 5556/TCP,5557/TCP
projectname-argocd-redis ClusterIP 10.100.230.170 <none> 6379/TCP
projectname-argocd-repo-server ClusterIP 10.100.221.87 <none> 8081/TCP
projectname-argocd-server ClusterIP 10.100.22.26 <none> 80/TCP,443/TCP
據我了解,service projectname-argocd-server
是我應該公開以獲得 ArgoCD WebUI 的服務。 嘗試這樣做,我創建了一個入口(基於docs ):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-routing
spec:
rules:
- host: test2.projectname.org
http:
paths:
- path: /
pathType: Prefix # presumably may comment this out
backend:
service:
name: projectname-argocd-server
port:
number: 80
# this was added later while trying to figure the problem out
defaultBackend:
service:
name: projectname-argocd-server
port:
number: 80
ingressClassName: nginx
並通過kubectl apply -f routing.yaml -n argocd
應用它。 現在我可以看到入口與 ArgoCD 部署創建的入口一起創建,並且kubectl get ing -A
的輸出是(省略 AGE 和 80 的端口; <url>
是 AWS 控制台中顯示的 LoadBalancer 的 url) :
NAMESPACE NAME CLASS HOSTS ADDRESS
argocd projectname-argocd-server nginx test.projectname.org <url>
argocd ingress-routing nginx test2.projectname.org <url>
順便說一下, kubectl get svc -n nginx
顯示nginx-ingress-ingress-nginx-controller
是帶有 url <url>
( 80:30538/TCP
) 的 LoadBalancer。
kubectl describe ingress -n argocd
顯示 ingress ingress-routing
,地址正確,默認后端和規則; 對於入口項目名稱projectname-argocd-server
它顯示了正確的地址和規則(路徑/
),盡管Default backend
顯示為default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
。
現在讓我也展示一下 DNS 設置來完成圖片:
test.projectname.org
指向<url>
test2.projectname.org
創建了一個 A 條目,從列表中選擇了負載均衡器,因此它指向dualstack.<url>
我希望至少在http://test.projectname.org/
和http://test2.projectname.org/
之一看到 ArgoCD 界面。 實際發生的是:
當我打開http://test.projectname.org/
,它會將我重定向到 https url 並顯示NET::ERR_CERT_AUTHORITY_INVALID
。 如果我堅持訪問,瀏覽器會顯示ERR_TOO_MANY_REDIRECTS
。
在我添加入口類並將ingress-routing
從nginx
命名空間移動到argocd
命名空間之前, http://test2.projectname.org/
argocd
給了我 404; 現在它也重定向到 https 然后給出ERR_TOO_MANY_REDIRECTS
我還檢查了/healthz
地址,但它們給出了與/
相同的結果。 (相比之下, http://<url>/healthz
給出了一個空頁面)
我的問題是:我還缺少什么,為什么我沒有獲得 UI?
在設置某些 SSL 證書之前是否無法公開服務? 嘗試在不同的子域(test.projectname.org 和 test2.projectname.org)上公開相同的內容時,2 個入口是否會發生沖突? 我可以在不使用 projectname.org 來檢查它是否配置和部署正確的情況下看到至少一項服務 (ArgoCD) 嗎? (區分是入口/路由/DNS 問題還是配置問題)
(*) 這是我用來安裝 ArgoCD 的圖表:
apiVersion: v2
name: argo-cd
appVersion: v2.1.5
description: A declarative, GitOps continuous delivery tool for Kubernetes
version: 3.26.3
dependencies:
- name: argo-cd
version: 3.26.3
repository: https://argoproj.github.io/argo-helm
我使用的 values-overwrite.yaml 只是包含在argo-cd:
的默認值,因為這些應該應用於依賴項。 值得注意的是,那些在ingress:
enabled: false
,因此創建 ingress projectname-argocd-server
的事實有些出乎意料。
PS nginx
IngressClass 是生成的,而不是手動創建的,因此查看它也可能很有用(我已將 ID 和時間戳替換為“...”),如kubectl get IngressClass nginx -o yaml
:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
annotations:
meta.helm.sh/release-name: nginx-ingress
meta.helm.sh/release-namespace: nginx
creationTimestamp: ...
generation: 1
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: nginx-ingress
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/version: 1.0.3
helm.sh/chart: ingress-nginx-4.0.5
name: nginx
resourceVersion: "5750"
uid: ...
spec:
controller: k8s.io/ingress-nginx
是的,這個問題有點復雜,但我已經弄清楚了。 基本上,它包括2個問題:
https 配置的主要問題在一個單獨的問題中得到解決,並簡化為將 ACME 服務器從登台切換到生產。 我在我的回答中提供了更多細節。
現在,入口配置有點棘手,因為 ArgoCD 有一些重定向,~內部 TLS 要求~,並且還在 :443 處提供多個協議。 幸運的是,我發現本教程顯示了 ssl-passthrough 設置、更多入口注釋,包括nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
修復了ERR_TOO_MANY_REDIRECTS
錯誤。 這是我的入口配置,它適用於 https 設置(還要注意端口和 tls 機密的更改):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-argocd-routing
namespace: argocd
annotations:
cert-manager.io/cluster-issuer: <cluster issuer name>
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
ingressClassName: nginx
tls:
- hosts:
- test2.projectname.org # switched to argocd. later
secretName: argocd-secret # do not change, this is provided by Argo CD
rules:
- host: test2.projectname.org # switched to argocd. later
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: projectname-argocd-server
port:
number: 443
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.