首页 > 解决方案 > 使用 tcp 暴露 k8s 服务

问题描述

我有一个 eks 集群,一切正常。我想运行一个在端口 5000 上侦听 tcp 请求的服务。我正在尝试阅读它,但我能找到的所有指南都使用 http 作为示例。我想我对所有不同的概念有点困惑。如果我定义:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  ports:
    - port: 5000
      targetPort: 5000
      protocol: TCP

并运行它(实际上使用 helm),我可以在 aws-console 上看到创建了一个经典的负载均衡器。但我无法ping通它。

所以基本上,我如何创建一个将端口 5000 转发到我的服务的网络负载均衡器?看起来这应该很简单,因为我找不到如何做到这一点。最终,我想为 nlb 提供一个静态 IP,以便我可以向该端口发送请求。我是否需要安装 nginx(或其他入口控制器)才能使其工作?

标签: kubernetestcpamazon-eksnlb

解决方案


首先,您使用 LoadBalancer 类型创建服务的正确方法。通过查看 Service.yaml 内容,唯一缺少的是 Service 对象中的选择器字段丢失,您的服务不知道在哪些 pod 上转发流量。尝试添加它。

如果您打算只公开单个服务,那么 LoadBalancer 类型是有意义的。但是,如果您要拥有多个服务,那么创建多个 LoadBalancer 服务的成本会很高。在这种情况下,Nginx Ingress 可以帮助您只需要一个 LoadBalancer 类型的服务。参考https://medium.com/better-programming/how-to-expose-your-services-with-kubernetes-ingress-7f34eb6c9b5a


推荐阅读