为redis在云中创建连接字符串

zzzyeukh  于 2021-06-09  发布在  Redis
关注(0)|答案(2)|浏览(425)

我有一个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?如果没有,你怎么解决这个问题?

46qrfjad

46qrfjad1#

您至少可以通过nginx-one入口暴露tcp
https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/

stszievb

stszievb2#

您已经发现redis不能通过http协议工作,据我所知,这是正确的。路由通过检查每个请求的http主机头来工作,这对redis不起作用。这意味着您将无法对非http工作负载使用路由。
通常,此类非http服务通过 Service 以及 NodePorts . 这意味着作为集群一部分的每个工作节点将打开此端口,并将流量转发到应用程序。
您可以在kubernetes文档中找到更多信息:
nodeport:在静态端口(nodeport)公开每个节点的ip上的服务。自动创建nodeport服务路由到的clusterip服务。您可以通过请求从集群外部联系nodeport服务:。
您可以像这样定义一个nodeport(这个示例是针对mysql的,它也是非http工作负载):

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    name: mysql
spec:
  type: NodePort
  ports:
    - port: 3306
      nodePort: 30036
      name: http
  selector:
    name: mysql

当然,管理员可能会限制对这些端口的访问,因此在openshift集群上使用这些类型的服务可能是可能的,也可能是不可能的。

相关问题