Istio - 在 AWS NLB 终止 TLS

问题描述 投票:0回答:3

我正在使用 EKS 和通过 Helm 安装的最新 Istio。我正在尝试基于我们在 AWS 证书管理器中为域拥有的通配符证书来实施 TLS。我遇到了一个问题,客户端和 NLB 之间的连接正常,TLS 在那里终止,但 NLB 无法通过安全端口与 istio LB 通信。在AWS控制台中,我可以重写转发规则,将流量从端口443转发到标准istio http目标,但我找不到通过代码来执行此操作的方法。我试图避免所有点击操作。这是我对网关的 Helm 覆盖:

gateways:
  istio-ingressgateway:
    serviceAnnotations:
        service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
        service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:XXXXXXXXXXXXXXXXXX:certificate/XXXXXXXXXXXXXXXXXXXX"
        service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http"
        service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"

所以我期望这里发生的是:

Client:443 --> NLB:443 --> Istio Gateway:80
but what I end up with is
Client:443 --> NLB:443 --> Istio Gateway:443

有人对如何通过代码使其工作有任何想法吗?或者,如果有人可以向我指出一个资源,以便在 NLB 和 Istio 之间进行 tls 通信,我也很乐意这样做。

amazon-web-services ssl istio nlb
3个回答
0
投票

可能发生的情况是,如果您终止负载均衡器上的 TLS,它不会将 SNI 传送到目标组。我遇到了完全相同的问题,最终通过在入口

'*'
上将主机设置为
Gateway
来解决它,然后在不同的
VirtualService
上指定主机(按照 here 以及 istio 官方的建议)文档)。


0
投票

您的服务注释已经正确,缺少的是将 istio 网关端口 443 更改为 HTTP

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: http-gateway-external
  namespace: istio-ingress
spec:
  selector:
    istio: gateway-external
  servers:
  - hosts:
    - '*'
    port:
      name: http
      number: 80
      protocol: HTTP
  - hosts:
    - '*'
    port:
      name: https
      number: 443
      protocol: HTTP     # Change from HTTPS to HTTP

0
投票

解决这个问题的答案是将目标群体的TCP协议切换为TLS

按照以下步骤操作。 NLB注释:

annotations:
  ...
  service.beta.kubernetes.io/aws-load-balancer-ssl-ports: 'https'
  service.beta.kubernetes.io/aws-load-balancer-ssl-cert: xxx
  ...

生成自签名证书:

openssl req -x509 -sha256 -nodes -newkey rsa:2048 -subj "/O=devopsvn.tech/CN=devopsvn.tech" -keyout devopsvn.tech.key -out devopsvn.tech.crt

生成证书签名请求(CSR):

openssl req -out sub.devopsvn.tech.csr -newkey rsa:2048 -nodes -keyout sub.devopsvn.tech.key -subj "/CN=sub.devopsvn.tech/O=sub.devopsvn.tech"

使用自签名证书签署 CSR:

openssl x509 -req -CA devopsvn.tech.crt -CAkey devopsvn.tech.key -set_serial 0 -in sub.devopsvn.tech.csr -out sub.devopsvn.tech.crt

Istio 网关配置:

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: istio-gateway
spec:
  selector:
    istio: istio-gateway
  servers:
    - port:
        number: 443
        name: https
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: tls-cert
      hosts:
        - "*"

使用 TLS 协议创建新的 TargetGroup

TLS Protocol

使用 TargetGroupBinding 将 TargetGroup 绑定到 NLB。

© www.soinside.com 2019 - 2024. All rights reserved.