docker - 在云中为 Redis 创建连接字符串
问题描述
我有一个 Redis 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?如果没有,你如何解决这个问题?
解决方案
您已经发现 Redis 不能通过 HTTP 协议工作,据我所知这是正确的。路由通过检查每个请求的 HTTP Host 标头来工作,这对 Redis 不起作用。这意味着您将无法将 Routes 用于非 HTTP 工作负载。
通常,此类非 HTTP 服务通过 aService
和公开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 集群上使用这些类型的服务。
推荐阅读
- python - Matplotlip - plotting many lines from dataframe in one graph
- vb.net - Get the name of the Parent of a child Panel
- javascript - Changes to localParticipant tracks do not propagate to remote participants when disabling webcam or microphone
- android - Error dagger missingBinding in Kotlin with dagger 2
- sql-server - Parallel merge strategy without deadlock
- java - Logging with prefix determined at a Class Initialization
- hibernate - InvalidDataAccessApiUsageException @OneToMany and @ManyToOne relationship
- php - 使用 php 和 httpclient 下载 githubarchive 数据
- apache-kafka - Kafka jdbc 连接接收器:是否可以将 pk.fields 用于值和键中的字段?
- ios - .gitignore 和 Pod 文件的问题