Контроллер входа AWS ALB не разрешается по протоколу TLS - PullRequest
5 голосов
/ 12 марта 2019

Я установил и настроил AWS ALB Ingress Controller (https://github.com/kubernetes-sigs/aws-alb-ingress-controller), и он работает должным образом по HTTP. Однако он не разрешается по HTTPS.

Ресурс Ingress:

$ 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/

При редактировании Ingress выглядит следующим образом:

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

Дело в том, что Ingress не разрешается по TLS - он просто отключается. Насколько я знаю, это правильный способ его настройки, поэтому я не знаю, почему он не работает. Любая помощь приветствуется.

1 Ответ

7 голосов
/ 12 марта 2019

Я думаю, что вы смешиваете 2 разные вещи здесь: Вы хотите использовать ALB Ingress Controller, но вы показываете, что используете конфигурацию для Nginx Controller. Это на самом деле 2 довольно разных проекта. Они служат общей цели, но на самом деле это совершенно разные способы ее решения. Nginx работает в вашем кластере, в то время как ALB Ingress Controller фактически просто настраивает ALB, который работает на его собственной машине (машинах).

Проблема в том, что ALB не может использовать пользовательские сертификаты. По крайней мере, не напрямую из Кубернетеса. Сначала их нужно поместить в ACM .

Если у вас уже есть сертификат в ACM, ALB Ingress Controller должен соответствовать ему в соответствии с документацией .

Вы также можете указать, какой сертификат использовать для балансировщика нагрузки, например:

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

(замените ARN, полученным от ACM)

Еще несколько общих советов по отладке:

  1. Найдите балансировщик нагрузки в Консоли управления AWS и проверьте, были ли применены ваши слушатели так, как вы ожидаете. Если это выглядит так, как будто вы его настроили, значит, здесь уже что-то не так с логикой.
  2. Если они не применяются, возможно, при входном контроллере ALB возникла проблема с анализом вашего входа. Проверьте журналы модуля alb-ingress-controller в пространстве имен системы kube, чтобы получить более подробную информацию об этом.
...