当前位置: 首页 > 知识库问答 >
问题:

AWS ALB入口控制器无法通过TLS解析

庄文栋
2023-03-14

我已经安装并配置了AWS ALB入口控制器(https://github.com/kubernetes-sigs/aws-alb-ingress-controller),它可以通过HTTP正常工作。但是,它不能通过HTTPS解析。

入口资源如下:

$ kubectl describe ingress api-gateway-ingress
Name:             api-gateway-ingress
Namespace:        orbix-mvp
Address:          4ae1e4ba-orbixmvp-apigatew-c613-1873743362.eu-central-1.elb.amazonaws.com
Default backend:  default-http-backend:80 (<none>)
TLS:
  api-gateway.orbixpay.com terminates api-gateway.orbixpay.com,4ae1e4ba-orbixmvp-apigatew-c613-1873743362.eu-central-1.elb.amazonaws.com
Rules:
  Host  Path  Backends
  ----  ----  --------
  *     
        /*   api-gateway:3000 (<none>)
Annotations:
  kubernetes.io/ingress.class:                       alb
  alb.ingress.kubernetes.io/scheme:                  internet-facing
  alb.ingress.kubernetes.io/ssl-policy:              ELBSecurityPolicy-2016-08
  alb.ingress.kubernetes.io/subnets:                 subnet-0c4cb5452b630939e, subnet-0e5d3c389bfbefee9
  alb.ingress.kubernetes.io/success-codes:           302
  kubectl.kubernetes.io/last-applied-configuration:  {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"alb.ingress.kubernetes.io/scheme":"internet-facing","alb.ingress.kubernetes.io/ssl-policy":"ELBSecurityPolicy-2016-08","alb.ingress.kubernetes.io/subnets":"subnet-0c4cb5452b630939e, subnet-0e5d3c389bfbefee9","alb.ingress.kubernetes.io/success-codes":"302","kubernetes.io/ingress.class":"alb"},"labels":{"app":"api-gateway"},"name":"api-gateway-ingress","namespace":"orbix-mvp"},"spec":{"rules":[{"host":"api-gateway.orbixpay.com","http":{"paths":[{"backend":{"serviceName":"api-gateway","servicePort":3000},"path":"/*"}]}}]}}

Events:  <none>

我还按照此处的说明添加了自签名SSL证书:

https://kubernetes.github.io/ingress-nginx/user-guide/tls/

编辑时,入口如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-2016-08
    alb.ingress.kubernetes.io/subnets: subnet-0c4cb5452b630939e, subnet-0e5d3c389bfbefee9
    alb.ingress.kubernetes.io/success-codes: "302"
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"alb.ingress.kubernetes.io/scheme":"internet-facing","alb.ingress.kubernetes.io/ssl-policy":"ELBSecurityPolicy-2016-08","alb.ingress.kubernetes.io/subnets":"subnet-0c4cb5452b630939e, subnet-0e5d3c389bfbefee9","alb.ingress.kubernetes.io/success-codes":"302","kubernetes.io/ingress.class":"alb"},"labels":{"app":"api-gateway"},"name":"api-gateway-ingress","namespace":"orbix-mvp"},"spec":{"rules":[{"host":"api-gateway.orbixpay.com","http":{"paths":[{"backend":{"serviceName":"api-gateway","servicePort":3000},"path":"/*"}]}}]}}
    kubernetes.io/ingress.class: alb
  creationTimestamp: "2019-03-07T14:57:22Z"
  generation: 8
  labels:
    app: api-gateway
  name: api-gateway-ingress
  namespace: orbix-mvp
  resourceVersion: "2230952"
  selfLink: /apis/extensions/v1beta1/namespaces/orbix-mvp/ingresses/api-gateway-ingress
  uid: 4fd70b63-40e9-11e9-bfe7-024a064218ac
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: api-gateway
          servicePort: 3000
        path: /*
  tls:
  - hosts:
    - api-gateway.orbixpay.com
    - 4ae1e4ba-orbixmvp-apigatew-c613-1873743362.eu-central-1.elb.amazonaws.com
    secretName: api-gateway.orbixpay.com
status:
  loadBalancer:
    ingress:
    - hostname: 4ae1e4ba-orbixmvp-apigatew-c613-1873743362.eu-central-1.elb.amazonaws.com

问题是,入口不能解决TLS问题——它只是超时了。据我所知,这是设置它的正确方法,所以我相当不知道为什么它不起作用。感谢任何帮助。

共有1个答案

王长卿
2023-03-14

我认为您在这里混淆了两件不同的事情:您想要使用ALB入口控制器,但您正在显示您正在使用Nginx控制器的配置。这实际上是两个截然不同的项目。它们有一个共同的目的,但实际上是完全不同的解决方法。Nginx正在您的集群上运行,而ALB入口控制器实际上只是配置一个在自己的机器上运行的ALB。

问题是,ALB不能使用自定义证书。至少不能直接来自库伯内特斯。它们需要首先放入ACM。

根据文档,如果您已经在ACM中拥有证书,ALB入口控制器应该与之匹配。

您还可以像下面这样指定用于负载平衡器的证书

alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:eu-central-1:1231234564:certificate/4564abc12-d3c2-4455-8c39-45354cddaf03

(替换为您从ACM获得的ARN)

调试此项的一些更一般的提示:

  1. 在AWS管理控制台中搜索负载均衡器并检查您的侦听器是否已按您的预期应用。如果看起来您已经配置了它,那么这里的逻辑一定已经有问题了。
  2. 如果没有应用它们,可能ALB入口控制器在解析您的入口时遇到了问题。检查库贝-system命名空间中alb-ingress-Controlpod的日志以获取有关此的更多详细信息。
 类似资料:
  • 我有一个JavaSpring Boot Application,我已经将服务器配置为在SSL上运行,这是强制性的。 我已经为我的域创建了一个证书从LetsEncrypt证书,并通过运行为keystore创建了一个p12文件 我想用Ingress Nginx控制器在Kubernetes上公开它,所以我创建了一个秘密 我已经部署了应用程序,可以看到部署文件,当我将本地8443端口转发到其服务的8443

  • 我使用nginx入口控制器在GKE上设置了一个新的kubernetes集群。TLS不起作用,它在使用假证书。 有很多配置细节,所以我做了一个回购https://github.com/jobevers/test_ssl_ingress 简而言之,步骤是 创建一个没有GKE负载均衡器的新集群 用我的密钥和证书创建一个tls秘密 创建一个nginx入口部署/pod 创建入口控制器 nginx-ingre

  • 我们正在GKE(谷歌kubernetes引擎)上运行一个API服务器。我们使用Google云endpoint和API密钥处理授权。我们将每个API密钥上的某些IP地址列为白名单。为了做到这一点,我们必须将负载平衡器转换为入口控制器,以公开我们的API服务器。IP白名单不适用于loadbalancer服务。现在,我们有一个类似以下内容的入口设置:

  • 我正在使用k3s的默认安装(版本v1.17.0 k3s.1)并验证它在我的Raspberry Pi集群上正常工作。 在使用推荐的说明(https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/)安装kubernetes-dashboard之后,我使用基于k3s traefik的负载均衡器将其暴露在集群之

  • 我正在设置我的入口控制器、入口类和入口,以在集群外部公开服务。这是全新的集群设置。 我已经使用 nginx 入口控制器设置了 nginx-ingress 控制器 <code>kubectl应用-fhttps://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.0/deploy/static/provider/b

  • 我在这里得到了一个完整的示例应用程序:https://github.com/MrMojoR/hibernateOnKotlin 这段代码基于这篇博客文章:https://kotlinexpertise.com/hibernate-with-kotlin-spring-boot/ 问题是,虽然懒惰提取在集成测试中工作得很好,但调试器中有一个异常:来自测试的异常 当我从控制器运行相同的代码时,没有异常