【发布时间】:2021-12-17 05:52:06
【问题描述】:
我在 Kubernetes 中部署了一个入口,并在不同的入口命名空间上使用了两个应用程序。
当我访问 APP2 时,我可以访问该网站并且它工作正常,但 APP1 显示空白页面。没有错误只是 BLANK 和响应 200 OK。
基本上我将 ArgoCd 与 Azure AD 集成在一起。集成很好,但我认为入口规则并不完全正常。
两个应用程序都在不同的命名空间上,所以我必须在不同的命名空间上使用两个不同的入口:
这是APP1:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-server-ingress
namespace: argocd
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /argo-cd/$2
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
defaultBackend:
service:
name: argocd-server
port:
number: 443
rules:
- http:
paths:
- path: /argo-cd
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 443
这是APP2:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sonarqube-ingress
namespace: ingress-nginx
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
defaultBackend:
service:
name: sonarqube
port:
number: 9000
tls:
- hosts:
- sq-example
secretName: nginx-cert
rules:
- host: sq.example.com
http:
paths:
- path: /sonarqube(/|$)(.*)
pathType: Prefix
backend:
service:
name: sonarqube
port:
number: 9000
- path: /(.*)
pathType: Prefix
backend:
service:
name: sonarqube
port:
number: 9000
入口部署参数:
spec:
containers:
- args:
- /nginx-ingress-controller
- --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller
- --election-id=ingress-controller-leader
- --controller-class=k8s.io/ingress-nginx
- --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
- --validating-webhook=:8443
- --validating-webhook-certificate=/usr/local/certificates/cert
- --validating-webhook-key=/usr/local/certificates/key
- --default-ssl-certificate=ingress-nginx/ca-key-pair
- --enable-ssl-passthrough
记录入口控制器 pod:
10.200.140.160 - - [03/Nov/2021:15:00:34 +0000] "GET /argo-cd HTTP/1.1" 200 831 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" 489 0.002 [argocd-argocd-server-443] [] 10.200.140.177:8080, 10.200.140.177:8080 0, 831 0.000, 0.004 502, 200 d491c01cd741fa9f155642f8616b6d9f
2021/11/03 15:09:05 [error] 867#867: *534643 SSL_do_handshake() failed (SSL: error:1408F10B:SSL routines:ssl3_get_record:wrong version number) while SSL handshaking to upstream, client: 10.200.140.160, server: _, request: "GET /argo-cd/ HTTP/1.1", upstream: "https://10.200.140.177:8080/argo-cd/", host: "10.200.140.211"
10.200.140.160 - - [03/Nov/2021:15:09:05 +0000] "GET /argo-cd/ HTTP/1.1" 200 831 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" 440 0.006 [argocd-argocd-server-443] [] 10.200.140.177:8080, 10.200.140.177:8080 0, 831 0.000, 0.004 502, 200 8995b914ae6e39d8ca781e1f4f269f50
10.200.140.160 - - [03/Nov/2021:15:09:16 +0000] "GET /argo-cd HTTP/1.1" 200 831 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" 489 0.001 [argocd-argocd-server-443] [] 10.200.140.177:8080 831 0.004 200 0adadba11c87f9b88ed75d52e4ca387a
我尝试在 APP1 上使用路径:/argo-cd,例如:
路径:/argo-cd/ 路径:/argo-cd/(/|$)(.) 路径:/argo-cd/(.) 路径:/argo-cd/*
但不可能让它工作。我在这里做错了吗?
提前致谢。
【问题讨论】:
-
只是猜测:在argo-cd ingress docu 中,如果使用
ssl-passthrough,则必须使用--enable-ssl-passthrough启动nginx 入口控制器。你做过吗? -
@mr.wolle 我在入口控制器参数中添加了这个并且仍然得到相同的结果。容器:-args:---validating-webhook-certificate=/usr/local/certificates/cert---default-ssl-certificate=ingress-nginx/ca-key-pair--更多东西---enable-ssl -直通
-
我用新鲜的ArgoCD installation 测试了你的 Ingress 定义,它运行良好。你是如何安装 ArgoCD 和 Nginx Ingress 控制器的?您能否获取 Ingress 控制器 pod 的名称 (
kubectl get pods -n ingress-nginx),然后运行 kubectl logs {ingress-nginx-controller-pod-name} -n ingress-nginx并粘贴日志? -
@MikolajS。要安装 argoCD,我遵循以下步骤: 1. kubectl create namespace argocd 2. kubectl apply -n argocd -f raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/… 3. 对于 AD 集成,我遵循:Azure AD App Registration Auth using OIDC using argo-cd.readthedocs.io/en/stable/operator-manual/… 之前我在测试安装,它工作正常,但不是在暂存中。很可能它与入口控制器/入口规则有关...对于 Ingress Heml dpl
-
kubectl get pods -n ingress-nginx NAME READY STATUS RESTARTS AGE ingress-nginx-controller-77f778464b-74x6h 1/1 Running 0 12h ingress-nginx-controller-77f778464b-wwgf2 1/1 Running 0 12h sonarqube-774cfbc997-qj7pz 1/1 运行 0 17h
标签: azure kubernetes kubernetes-ingress nginx-ingress argocd