如何将TCP流量从外部路由到Kubernetes集群内部的服务?

时间:2018-10-22 14:16:11

标签: tcp kubernetes orientdb azure-aks

我在Azure(AKS)上有一个群集。我有orientdb服务

apiVersion: v1
kind: Service
metadata:
  name: orientdb
  labels:
    app: orientdb
    role: backend
spec:
  selector:
    app: orientdb
  ports:
  - protocol: TCP
    port: 2424
    name: binary
  - protocol: TCP
    port: 2480
    name: http
我想暴露给外部的

,以便来自互联网的应用程序可以将TCP流量直接发送到此服务。

(要连接到orientdb,您需要通过TCP连接到端口2424)

我的网络能力不强,所以这是我的理解,这可能是错误的。 我尝试了以下方法:

  1. 设置入口
    • 无效,因为Ingress处理http,但不适用于tcp。
  2. 我试图在NodePort定义的服务配置中设置ExternalIP字段
    • 没用。

所以我的问题如下:
我无法将tcp流量发送到服务。 Http流量工作正常。

如果有人向我展示如何公开我的服务,以便我可以将TCP流量直接感知到面向我的服务,我将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以同时使用Loadbalancer类型的服务(我假设AKS支持该服务),也可以只使用节点端口。

kubectl expose deployment hello-world --type=LoadBalancer --name=my-service

kubectl get services my-service

输出与此类似:

NAME         TYPE        CLUSTER-IP     EXTERNAL-IP      PORT(S)    AGE
my-service   ClusterIP   10.3.245.137   104.198.205.71   8080/TCP   54s

引用here

kubectl公开用法:

Usage
$ expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]

您可以在上面的--port= 2424 --target-port= 2424命令中使用kubectl expose选项来设置正确的端口