用于路由 TCP 流量的入口控制器
Ingress controller to route TCP traffic
我正在尝试设置入口控制器 (nginx) 以将一些 TCP 流量转发到 kubernetes 服务 (GCP)。 this tutorial 展示了如何使用 nginx 将 HTTP 流量路由到服务(基于路径)。我想要一个类似的设置来转发 TCP 流量。
在我的集群中,我有一个 pod 运行 使用套接字在 python 中编写了一个 TCP 回显服务器。 Pod 上附加了一项服务。如果我将此服务的服务类型设置为 LoadBalancer,我可以 运行 我的客户端如下所示并从集群中获取回显。
python client.py --host <EXTERNAL-IP-OF-LOAD-BALANCER> --port <PORT>
与回显服务器类似,我的集群中还有其他 TCP 服务为其他 pods 服务。目前我已经将它们全部设置为 LoadBalancers。因此,它们具有外部 IP 并侦听不同端口上的流量。但是,我不想为所有这些服务创建 LoadBalancer。我将如何使用 nginx 根据端口号将 TCP 流量路由到不同的服务。如果 nginx 不能做到这一点,我可以使用其他选项来实现吗?
更新:
根据 HangDu 的回答,我创建了以下文件。
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: default
data:
9000: "default/echo-service:50000"
和
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: default
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
- name: https
port: 443
targetPort: 443
protocol: TCP
- name: proxied-tcp-9000
port: 9000
targetPort: 9000
protocol: TCP
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
然后我使用 kubectl create -f <FILE_NAME>
创建配置映射和服务。所以我希望我可以使用新创建的服务的外部 IP 和端口 9000 和 运行 python client.py --host <EXTERNAL-IP-OF-LOAD-BALANCER> --port 9000
到 运行 我的 echo 客户端。但是,当我这样做时,我收到连接被拒绝的错误。我做错了什么吗?
我在另一个帖子上回答了类似的问题。 How to use nginx ingress TCP service on different namespace
基本上,您可以在 configmap 中为您的服务指定端口和后端。
以下是link的文档。
https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/exposing-tcp-udp-services.md
我正在尝试设置入口控制器 (nginx) 以将一些 TCP 流量转发到 kubernetes 服务 (GCP)。 this tutorial 展示了如何使用 nginx 将 HTTP 流量路由到服务(基于路径)。我想要一个类似的设置来转发 TCP 流量。
在我的集群中,我有一个 pod 运行 使用套接字在 python 中编写了一个 TCP 回显服务器。 Pod 上附加了一项服务。如果我将此服务的服务类型设置为 LoadBalancer,我可以 运行 我的客户端如下所示并从集群中获取回显。
python client.py --host <EXTERNAL-IP-OF-LOAD-BALANCER> --port <PORT>
与回显服务器类似,我的集群中还有其他 TCP 服务为其他 pods 服务。目前我已经将它们全部设置为 LoadBalancers。因此,它们具有外部 IP 并侦听不同端口上的流量。但是,我不想为所有这些服务创建 LoadBalancer。我将如何使用 nginx 根据端口号将 TCP 流量路由到不同的服务。如果 nginx 不能做到这一点,我可以使用其他选项来实现吗?
更新: 根据 HangDu 的回答,我创建了以下文件。
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: default
data:
9000: "default/echo-service:50000"
和
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: default
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
- name: https
port: 443
targetPort: 443
protocol: TCP
- name: proxied-tcp-9000
port: 9000
targetPort: 9000
protocol: TCP
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
然后我使用 kubectl create -f <FILE_NAME>
创建配置映射和服务。所以我希望我可以使用新创建的服务的外部 IP 和端口 9000 和 运行 python client.py --host <EXTERNAL-IP-OF-LOAD-BALANCER> --port 9000
到 运行 我的 echo 客户端。但是,当我这样做时,我收到连接被拒绝的错误。我做错了什么吗?
我在另一个帖子上回答了类似的问题。 How to use nginx ingress TCP service on different namespace
基本上,您可以在 configmap 中为您的服务指定端口和后端。
以下是link的文档。 https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/exposing-tcp-udp-services.md