我在通过 nginx-ingress 打开 TCP 连接时遇到问题。
所以我的目标是我想在使用 Nginx-Ingress 的 Kubernetes 集群上的端口 9000 上打开 Clickhouse TCP 连接。
到目前为止,我可以在 nginx-controller 上打开 9000 TCP 端口连接,但是,我仍然无法使用 tcp 协议访问 Clickhouse 服务器。我仍然相信这是由 nginx/ingress 端引起的。
Clikhouse 安装工作正常,
port-forward
和 http
8123 端口上的协议已通过入口成功打开
以下是有关我的集群上的服务的一些信息:
kubectl -n ingress-nginx get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
ingress-nginx-controller LoadBalancer an.internal.ipx an.external.ip 80:31714/TCP,443:31594/TCP,9000:32033/TCP
ingress-nginx-controller-admission ClusterIP an.internal.ipy <none> 443/TCP
我该怎么做?
我只在我的
values.yaml
头盔部署中执行此操作
# values.yaml
ingress-nginx:
tcp:
9000: "test-clickhouse-operator/clickhouse-test-chi-speed:9000"
....
....
换句话说,我在命名空间
test-clickhouse-operator
中安装了一个 clickhouse,服务名称为 clickhouse-test-chi-speed
kubectl -n test-clickhouse-operator get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
chi-test-chi-speed-simple-0-0 ClusterIP None <none> 9000/TCP,8123/TCP,9009/TCP
clickhouse-operator-metrics ClusterIP an.internal.ipxx <none> 8888/TCP,9999/TCP
clickhouse-test-chi-speed LoadBalancer an.internal.ipyy an.external.ipyy 8123:31889/TCP,9000:32457/TCP
注意:集群外部无法访问
an.external.ipyy
。
最后,这是我的域名入口:
# ingress-subdomain-clickhouse-native.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-test-clickhouse-native
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: clickhousenative.staging.mydomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: clickhouse-test-chi-speed
port:
number: 9000
当我尝试通过浏览器点击此clickhousenative.staging.mydomain.com时,它将返回:
Port 9000 is for clickhouse-client program
You must use port 8123 for HTTP.
但是,当我用
clickhouse-client -h clickhousenative.staging.mydomain.com
击打时,它失败了。
伙计们,我错过了什么步骤吗?任何建议也会有所帮助,因为我现在没有任何可以遵循的资源,无论如何感谢您的帮助。
您需要允许 nginx 入口控制器的 TCP 端口公开和平衡,请查看文档中的示例 https://kubernetes.github.io/ingress-nginx/user-guide/exusing-tcp-udp-services/