我有一个redis pod,我希望不同的集群和不在云中运行的应用程序向这个pod发出连接请求。因为redis不能与http协议一起工作,所以我在下面所做的路由访问不能与这个连接字符串一起工作 route-redis.local:6379
".
路线.yml
apiVersion: v1
kind: Route
metadata:
name: redis
spec:
host: route-redis.local
to:
kind: Service
name: redis
服务.yml
apiVersion: v1
kind: Service
metadata:
name: redis
spec:
ports:
- port: 6379
targetPort: 6379
selector:
name: redis
您可能遇到过这种情况。简言之,有没有办法通过路由访问redis pod?如果没有,你怎么解决这个问题?
2条答案
按热度按时间46qrfjad1#
您至少可以通过nginx-one入口暴露tcp
https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/
stszievb2#
您已经发现redis不能通过http协议工作,据我所知,这是正确的。路由通过检查每个请求的http主机头来工作,这对redis不起作用。这意味着您将无法对非http工作负载使用路由。
通常,此类非http服务通过
Service
以及NodePorts
. 这意味着作为集群一部分的每个工作节点将打开此端口,并将流量转发到应用程序。您可以在kubernetes文档中找到更多信息:
nodeport:在静态端口(nodeport)公开每个节点的ip上的服务。自动创建nodeport服务路由到的clusterip服务。您可以通过请求从集群外部联系nodeport服务:。
您可以像这样定义一个nodeport(这个示例是针对mysql的,它也是非http工作负载):
当然,管理员可能会限制对这些端口的访问,因此在openshift集群上使用这些类型的服务可能是可能的,也可能是不可能的。