使用Kubernetes创建AWS ELB提供http和https服务

4
我正在尝试通过Kubernetes LoadBalancer类型的Service创建AWS ELB,但我无法找到所需注释的组合以实现我需要的结果。
这是我能够得到的最接近的结果:在部署下面的yaml时生成的AWS ELB 使用以下服务定义:
kind: Service
apiVersion: v1
metadata:
  name: my_app
  namespace: my_namespace
  labels:
    dns: route53
  annotations:
    domainName: my_app.my.domain.com
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:iam::accountId:server-certificate/CertificateName"
    service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
spec:
  type: LoadBalancer
  selector:
    app: my_app
    version: my_version
  ports:
    - protocol: TCP
      port: 80
      targetPort: non_secure_port_name
      name: http
    - protocol: TCP
      port: 443
      targetPort: secure_port_name
      name: https

问题是我需要将https端口的实例协议也设置为https,像这样

通过手动编辑ELB,一切都能正常工作,但我希望能够通过我的Kubernetes服务的.yaml配置实现第二张图片中的配置,以便在部署服务时不需要进行任何手动调整即可按预期工作。

这是否可能?我缺少哪些注释或特定配置?


1
另一个几乎可以解决但不完美的方法是更改后端协议:service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "ssl",但在这种情况下,我会失去 X-forwarded-for 头文件,因此无法检索源 IP,这是不可取的。 - Maxime Coulombe
你想在 ELB 或入口控制器或每个服务中终止 TLS 吗?你可以任意选择,但如果你想使用 AWS 证书,你必须在 ELB 上终止。 - Lev Kuznetsov
不终止SSL,在一个端口上提供http,在另一个端口上提供https,就像链接图片中所示,这个方案怎么样? - Maxime Coulombe
然后不要指定AWS负载均衡器注释。 - Lev Kuznetsov
你有没有找到这个问题的解决方案,@MaximeCoulombe? - Sonny Saluja
1个回答

2
这是使用AWS证书在ELB上终止TLS的咒语。
apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:foo
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
  labels:
    k8s-addon: ingress-nginx.addons.k8s.io
  name: ingress-nginx
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: http
  - name: https
    port: 443
    protocol: TCP
    targetPort: http
  selector:
    app: ingress-nginx
  type: LoadBalancer

如果您想强制使用SSL,可以在入口资源定义中使用ingress.kubernetes.io/ssl-redirect注释来实现。


我这里有一个问题,这个服务会将负载均衡器的所有443流量转发到容器的443还是80端口?因为我期望的是443。 - Hieu Le
负载均衡器终止SSL,因此负载均衡器后面的所有内容都是80端口。您想在哪里终止SSL? - Lev Kuznetsov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接