程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了带身份验证的 Kubernetes 负载平衡大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决带身份验证的 Kubernetes 负载平衡?

开发过程中遇到带身份验证的 Kubernetes 负载平衡的问题如何解决?下面主要结合日常开发的经验,给出你关于带身份验证的 Kubernetes 负载平衡的解决方法建议,希望对你解决带身份验证的 Kubernetes 负载平衡有所启发或帮助;

您如何构建 Kubernetes 应用程序,以便始终为登录用户提供存储在正确 Redis 副本中的后台会话信息?

我有一个用 Typescript 编写的可用的 Apollo/GraphQL 应用程序,它可以让用户登录并将他们的会话信息存储在 Redis 中。当我将通过 Kubernetes 运行多个 Redis 实例时,我不确定如何构建用于生产的应用程序。我目前编写的 Kubernetes 配置文件(用于 Redis 和应用程序)是 here。

大概我需要在我的应用程序前面安装某种负载均衡器服务来分配流量。但这就是我有点困惑的地方--

当用户向我的应用程序发出请求时(例如通过 kubernetes 负载均衡器服务),我如何确保我的应用程序检查“正确”的 Redis 副本?我的理解是确保检索到他们的凭据信息是必要的,例如检查他们的登录状态。如果我的应用程序每次都检查不同的 Redis 副本以获取用户的详细信息(通过 cookie/会话),那么我不确定登录功能将如何工作......除非我弄错了并且 Kubernetes 知道如何搜索所有副本?

以下是我当前的应用程序 connects 到 Redis 的方式(在启动 Redis 并通过 ClusterIP 将其公开后工作)(如果相关):

import Redis from "ioredis";
import session from "express-session";
import connectRedis from "connect-redis";

// Running Redis with docker-compose
let trIEs = 5;
const connectionopts: Redis.RedisOptions = {
  host: process.env.REdis_HOST,port: parseInt(process.env.REdis_PORT as string) || 6379,retryStrategy: (time) => {
    if (trIEs === 0) {
      throw new Error("Could not connect to Redis.");
    } else {
      setTimeout(() => {
        trIEs--;
      },time);
      return 2000;
    }
  },};

// Connect to Redis
export const redis = new Redis(connectionopts);

// Configure Redis to store session information
const RedisStore = connectRedis(session);

// Initialize session parameters and cookie name,etc.
export const mySession = session({
  store: new RedisStore({
    clIEnt: redis,}),name: "qID",secret: process.env.SECRET || "wiuy10b1la",resave: false,saveUninitialized: false,cookie: {
    httpOnly: true,secure: process.env.ENV === "production",maxAge: 1000 * 60 * 60 * 24 * 7 * 365,},});

解决方法

看起来您正在运行单主节点 Redis 。如果您正在运行多个 Redis 副本,那么它们必须同步运行,或者我认为是在集群模式下。

在集群模式下,Redis 将跨多个副本克隆数据。

您可以阅读:https://redis.io/topics/cluster-tutorial#redis-cluster-101

您还可以阅读有关 redis 复制概念的更多信息:https://redislabs.com/redis-enterprise/technology/highly-available-redis/

关于负载均衡请求,它将由 K8s 服务完成,但您的服务不会知道哪个是“正确的”(读取)(从属)副本,哪个是“读/写” “(Master)redis 的副本,因此还有另一个组件被称为哨兵

Sentinel 始终检查主从节点,并在没有人为干预的情况下发生任何故障时尝试稳定 Redis 集群。

如果您正在运行 HA Redis 集群,它将跨多个副本复制您的数据,并使用您可以首先向哨兵请求的库,它将为您提供主 IP,您可以在其中对其他 IP 执行写入操作,读取操作。

简单的python代码

from redis.sentinel import Sentinel
sentinel = Sentinel([('localhost',26379)],socket_timeout=0.1)
sentinel.discover_master('mymaster')
('127.0.0.1',6379)
sentinel.discover_slaves('mymaster')
[('127.0.0.1',6380)]

在主节点上,您将能够写入数据,而在从节点上您只能读取数据,并且复制将在所有副本的某个位置进行。

您应该首先检查 Redis 内部的复制,因为我仍然不确定您是如何设置 Redis 的。

大佬总结

以上是大佬教程为你收集整理的带身份验证的 Kubernetes 负载平衡全部内容,希望文章能够帮你解决带身份验证的 Kubernetes 负载平衡所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: