Kubernetes 服务 - 带 HTTPS 的负载均衡器

use*_*872 6 kubernetes

我将 kubernetes 与服务一起用作 ClusterIP 并将入口放置在服务前面以将其暴露给 Kubernetes 集群外部。

使用 https 运行 ingress 并使其成为 https,我创建了秘密并在 ingress 中使用了相同的秘密。

kubectl 创建秘密 tls test-secret --key key --cert cert

在我们的 kubernetes 集群中使用 netscalar,因此,我能够使用 X-Forward-For、会话关联、负载平衡算法以及入口。

现在,尝试将服务类型设为 LoadBalancer,这样我就不必有入口。我知道,服务类型负载均衡器提供 L4 负载均衡器,因此负载均衡器中不会有会话关联功能。因为,它可以用于少数服务,我正在尝试使用它。

试图使服务 HTTPS 并且我遇到了,

https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#securing-the-service

在这里,我们创建 tls secret 并使用部署部分而不是服务部分中的引用。不确定它是如何工作的。另外,当我在浏览器中使用https://servicename.namespace.svc.XXXXX.com时出现证书错误。

我的应用程序作为 https 运行,它需要在属性文件中使用密钥库和信任库,例如,

ssl.trustore=PATH_TO_THE_FILE ssl.keystore=PATH_TO_THE_FILE

我很困惑,如何使服务类型负载均衡器 https?

sur*_*ren 8

你自己回答了,但你没有意识到。

正如您所说,LoadBalancer 类型的服务创建了一个 L4 负载均衡器。L4 负载均衡器知道源 IP:port目标 IP:port,但它们不知道应用层上的任何内容。

HTTP/HTTPS 负载平衡器在 L7 上,因此它们是应用程序感知的。

因此,基本上您无法从 Loadbalancer 类型的服务中获得 HTTPS 负载均衡器。你希望它成为一个入口。

  • 有了它,您就可以保护流量,并进行必要的设置(在服务器级别)以在端口 443 上提供服务,而不是 80。但这不会使 LB L7,因为它仍然不知道应用程序数据,如路径. 说得通? (3认同)

小智 8

如果您使用云提供商(例如 AWS),您可以在 LoadBalancer 服务中启用 TLS 终止,如下所示:

apiVersion: v1
kind: Service
metadata:
  name: api
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:...
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
spec:
  type: LoadBalancer
  selector:
    app: myApp
  ports:
    -  protocol: TCP
       port: 443
       targetPort: 8080
Run Code Online (Sandbox Code Playgroud)