ArgoCD入口不可达



我正在尝试使用helm在EKS集群中设置argocd。我想使用ALB作为负载平衡器。用户界面可以通过http://node_ip:8080访问,但不能通过ALB或已创建的LB访问。

下面是我的配置:

ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/backend-protocol: HTTPS
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
alb.ingress.kubernetes.io/scheme: internal
alb.ingress.kubernetes.io/target-type: IP
alb.ingress.kubernetes.io/certificate-arn: "${cert}"
alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-FS-1-2-Res-2020-10

这是创建的入口:

kubectl get ing -n argocd
NAME            CLASS    HOSTS                         ADDRESS                                                          PORTS   AGE
argocd-server   <none>   eks-test-alb-argocd.abc.com   internal-k8s-argocd-argocdse-111.222.us-east-1.elb.amazonaws.com   80      9h

下面是我尝试使用DNS或LB地址时得到的结果:

curl internal-k8s-argocd-argocdse-111-222.us-east-1.elb.amazonaws.com
<html>
<head><title>502 Bad Gateway</title></head>
<body>
<center><h1>502 Bad Gateway</h1></center>
</body>
</html>

有什么问题吗?

好了,我找到问题了,它比我想象的要简单得多。

由于pod正在侦听端口80,我所要做的就是将backend-protocol更改为HTTP。就是这样。

从你的下面,看起来你的入口没有转发443到服务

kubectl get ing -n argocd
NAME            CLASS    HOSTS                         ADDRESS                                                          PORTS   AGE
argocd-server   <none>   eks-test-alb-argocd.abc.com   internal-k8s-argocd-argocdse-111.222.us-east-1.elb.amazonaws.com   80      9h

可以将server.ingress.https设置为true吗?

您是否为argocd-server创建了第二个服务?根据文档:

这是必要的,因为我们需要告诉ALB将GRPC流量发送到与UI流量不同的目标组,因为后端协议是HTTP2而不是HTTP1。

apiVersion: v1
kind: Service
metadata:
annotations:
alb.ingress.kubernetes.io/backend-protocol-version: HTTP2 #This tells AWS to send traffic from the ALB using HTTP2. Can use GRPC as well if you want to leverage GRPC specific features
labels:
app: argogrpc
name: argogrpc
namespace: argocd
spec:
ports:
- name: "443"
port: 443
protocol: TCP
targetPort: 8080
selector:
app.kubernetes.io/name: argocd-server
sessionAffinity: None
type: NodePort

您在入口定义中缺少的另一件事是注释中的以下条件:

alb.ingress.kubernetes.io/conditions.argogrpc: |
[{"field":"http-header","httpHeaderConfig":{"httpHeaderName": "Content-Type", "values":["application/grpc"]}}]

这是路由所有应用程序/grpc流量到之前创建的HTTP2后端。

参考:

  1. https://argo-cd.readthedocs.io/en/stable/operator-manual/ingress/aws-application-load-balancers-albs-and-classic-elb-http-mode

最新更新