【问题标题】:How to expose GRPCS service deployed on kubernetes in AWS using Kops如何使用 Kops 公开部署在 AWS 中 kubernetes 上的 GRPCS 服务
【发布时间】:2024-04-16 10:05:01
【问题描述】:

我正在部署一个 grpc 应用程序,该应用程序使用 tls 应用程序(准确地说是 grpcs)。应用部署到 AWS 云中的 kubernetes 集群,使用 Kops 工具创建。我正在使用自签名证书进行身份验证(现在)。问题是我找不到关于如何正确地将此类服务暴露给外部世界的任何指南。到处都有点点滴滴,但似乎没有什么能满足我的要求。额外的复杂性 - 我需要在同一个服务上公开多个端口,所以我不能对 k8s 使用 Ingress 规则,因为我的客户端应用程序限制使用 url 中的任何路径,并且要求我只指定主机和端口。在集群内部,一切都已设置好,并通过授权和正确的 DNS 解析按预期工作。

理想情况下我想要:

  • 将 grpcs 请求代理到集群中特定服务的解决方案。
  • 引入具有相同功能的负载平衡器的解决方案

非常感谢您的宝贵时间!

【问题讨论】:

标签: amazon-web-services networking kubernetes grpc tls1.2


【解决方案1】:

好的。感谢足以解决问题。注意注释部分。

apiVersion: v1
kind: Service

metadata:
  name: my-service
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: nlb
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "9999"
spec:
  ports:
    - port: 9999
      targetPort: 9999
      protocol: TCP
  selector:
    app: my-service
  type: LoadBalancer

然后我不得不将带有 balancer dns 名称的 A 记录添加到 Route 53,它起作用了。

【讨论】:

    【解决方案2】:

    随着时间的推移,我对解决方案进行了反复,发现external-dns sidecar 容器可以监视集群中出现的所有服务,搜索某些注释并自动创建 Route53 记录。我只能让它与管理集群节点角色的KIAM sidecar 容器一起工作。事实证明,这两个依赖项在生产中都表现良好。

    【讨论】:

      最近更新 更多