我正在阅读本教程,它说我们需要定义NodePort
何时使用服务类型LoadBalancer
。
但我见过LoadBalancer
没有提供 的服务类型的实现nodePort
。这是如何工作的?哪一个是正确的?
情况:我们管理的一个网站迁移到了一个新的托管解决方案,并且将拥有一个新域名。客户希望保留旧域名,并将其重定向到托管解决方案中的新域名(我们基本上无法控制)。
我在 AWS 应用程序负载均衡器级别添加了 301 重定向。它可以很好地将流量从旧 URL 分流到新 URL。但问题是,安全人员要求旧 URL(如果要继续)需要使用 HSTS 标头进行响应。这有点超出我的能力范围,我还没有想出很好的解决方案。
我能想到的唯一可行的解决方案(尚未测试,因为我希望有更好的解决方案)是在后端维护服务器,让其在提供重定向之前提供 HSTS 标头。这似乎有点过分 - 维护服务器只是为了添加标头。
阅读此处的文档和其他线程,听起来我不能将 HSTS 标头直接添加到 ALB 响应中。
我想现在看到的选择是:
为了更多地了解 K8S,我开始运行单个服务器/节点 K3S 集群作为家庭实验室。但我相信我对网络模型的理解已经陷入僵局,也许是针对 K3S 的。
到目前为止一切顺利,除了我想将 TLS 证书应用于我设置的一些服务+入口。
在其中一个中,我将 TLS 证书配置为机密并将其应用到与该服务关联的 Ingress,但是我总是得到TRAEFIK DEFAULT CERT
,您可以在此处查看。
据我了解,K3S 附带了预先打包的 Traefik 和 ServiceLB,以便不依赖云服务的外部负载均衡器(AWS 等)。我的第一个猜测是 Traefik 会“发现”我的 Ingress 中设置的路由并代理 TLS 流量,从而使用我设置的证书。显然情况并非如此,所以我想我需要为 Traefik 实例本身设置一个 TLS 证书。
我的问题是
如果需要,这是我的入口/服务配置
resource kubernetes_service_v1 snitch_service {
metadata {
name = "snitch"
namespace = module.namespace.name
}
spec {
selector = {
app = "snitch"
}
type = "LoadBalancer"
port {
name = "main"
port = 3010
target_port = 3000
node_port = 30003
}
}
}
resource kubernetes_secret_v1 tls_secret {
metadata {
name = "snitch-tls-cert"
namespace = "my-namespace"
}
type = "kubernetes.io/tls"
data = {
"tls.crt" = base64encode(my_certificate)
"tls.key" = base64encode(my_certificate_private_key)
}
}
resource kubernetes_ingress_v1 snitch_ingress {
metadata {
name = "snitch"
namespace = "my-namespace"
annotations = {
"ingress.kubernetes.io/ssl-redirect" = "false"
}
}
spec {
tls {
hosts = [local.subdomain]
secret_name = "snitch-tls-cert"
}
rule {
host = local.subdomain
http {
path {
path = "/"
path_type = "Prefix"
backend {
service {
name = "snitch"
port {
number = 3010
}
}
}
}
}
}
}
}
谢谢你!
我正在尝试设置一个网络负载均衡器,它根据第 3 层/第 4 层(IP 协议)数据将流量引导到健康的服务器。
问:这适用于 LDAP over SSL (LDAPS) 吗?(我知道第 7 层根据需要执行 TLS/SSL 解密)
我有一个网络负载均衡器,我的两个后端服务器正在运行 LDAP 服务。
运行可以ldapsearch
得到如下结果:
目标 | 询问 | 地位 |
---|---|---|
后端服务器1 | ldapsearch -x -H ldap://<Backend1> |
成功的 |
后端服务器1 | ldapsearch -x -H ldaps://<Backend1> |
成功的 |
后端服务器2 | ldapsearch -x -H ldap://<Backend2> |
成功的 |
后端服务器2 | ldapsearch -x -H ldaps://<Backend2> |
成功的 |
网络负载均衡器 | ldapsearch -x -H ldap://<NLB> |
成功的 |
网络负载均衡器 | ldapsearch -x -H ldaps://<NLB> |
不成功_ |
关于如何解决这个问题有什么建议吗?
编辑:
运行时ldapsearch -x -H ldaps://<NLB>
出现以下错误:
ldap_sasl_interactive_bind: Can't contact LDAP server (-1)
additional info: (unknown error code)
添加-d1
选项:
ldap_url_parse_ext(ldaps://ipa.example.com)
ldap_create
ldap_url_parse_ext(ldaps://ipa.example.com:636/??base)
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP ipa.example.com:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 10.141.4.23:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
attempting to connect:
connect success
TLS: hostname (ipa.example.com) does not match common name in certificate (ipa2.exmaple.com).
TLS: can't connect: (unknown error code).
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
那么...似乎我需要将证书附加到证书中包含 ipa1 和 ipa2 的 NLB?我不确定云提供商是否支持此功能。
注意:我无法通过 SSH 访问 NLB,因为它是一项托管服务。
假设我们x
每秒面临请求数,其中x
是单个负载均衡器无法处理的请求数量。
所以我们必须使用多个负载均衡器来处理所有请求,是吗?但如何呢?我需要对负载均衡器场进行负载均衡吗?糟糕的主意,最后还会出现单个负载均衡器必须处理所有请求的情况。
那么如何使用多个负载均衡器来处理海量的请求呢?
我使用 Nginx(网络服务器)、Neo4J(数据库)和 Wildfly(应用程序服务器)管理当前存在于单个节点上的网站的后端。该网站获得了足够的流量,当前“一体式”节点上的存储和内存资源都受到限制,因此我实例化了另外两个仅运行 WildFly 的 VPS 节点(总共 3 个)。
我已成功将 Nginx 配置为基于网站 URI 中包含的用户 ID 在 3 个节点上使用“哈希”负载平衡功能,以确保用户一致路由到运行 Wildfly 的同一 VPS 节点以优化缓存。
3 个节点中的每个节点都有自己的 150GB 高可用性块存储(由 VPS 提供商维护),其中包含安装的单个/images
目录,Wildfly 应用程序将在其各自的节点上读取/写入图像文件。
更新
图像文件应该是一次写入/多次读取(至少对于标称情况),因此始终会创建新图像,但现有图像很少更新。此外,由于 Nginx 的哈希负载平衡,每个 Wildfly 节点都应该拥有路由到它的客户端所需的所有图像。复制的需求实际上有两个方面:
此外,每个 VPS 节点都是专用千兆位 VLAN 的一部分,VPS 提供商为同一数据中心(我的所有节点都在其中)中的所有节点启用该 VLAN。复制数据将遍历的就是此链接。
/images
因为应用程序现在是分布式的,所以我希望完全复制 3 个节点上的每个目录。虽然 Nginx 的“哈希”负载平衡确保每个用户的节点使用一致,但我希望目录的内容是/images
所有三个节点的联合,以防其中一个节点出现故障并且需要在整个网络中重新分配用户。其他可用节点。
解决上述问题的最佳方法是什么?据我了解,rsync
这不是适合这项工作的工具。有一个服务器故障问题,本质上很相似,但它已经有 12 年历史了,我相信从那时起,数据复制已经取得了一些进展。
在我的研究中,我发现了GlusterFS,它看起来很有前途,但目前还不清楚如何设置它来解决我的问题。我是否会将每个节点上的每个高可用性块存储设备设为单个“砖块”,然后将其组合成单个 Gluster 卷?我想我然后/images
在这个单一的 Gluster 卷上创建目录并通过本机 FUSE 客户端将其安装到每个节点?我的直觉告诉我这是不正确的,因为每个节点同时既是客户端又是服务器,因为它们都为 Gluster 卷提供“砖块”和读/写功能,这似乎非常规。
(下面是一个假设场景,当我发现 gRPC 负载平衡的复杂性以及由于长期存在的 TCP 连接而效率低下时,我想到了这个问题)
假设有一个 HTTP 客户端维护单个 TCP 长期连接,用于向位于 HA 代理后面的 API 服务发出 HTTP 1.1 请求。该服务有多个冗余服务器部分,我想平衡不同上游服务器之间同一 TCP 连接上的所有请求。这样的事情可能吗?
我知道客户端可以打开多个连接到 LB,这将有助于解决问题。
但我想知道是否可以使用某些 HA 代理配置直接执行此操作。如果没有,为什么缺少这样的功能?是由于某种网络/HTTP 协议限制吗?还是因为有其他解决方法,所以从来不需要这样的功能?
假设 TLS 在 HA 代理处终止,因此它可以执行 L7 路由。HAProxy 也只是一个例子,任何其他 LB/代理,如 Envoy、Nginx 都具有此功能?
所以我最终想在 AWS 上设置一个经典的负载均衡器,并且我有一个带有 2 个公共子网的 VPC,但是现在我不确定我是否可以将这两个子网用于那个 EC2 实例,还是需要两个 ec2 实例?
如果我的基础架构中有一个带有下游 ECS 目标组的 ALB,SSL/TLS 是否总是在 ALB 处终止?
如果是这样,我唯一的选择是 ELB/NLB 来保留 SSL/TLS 上下文吗?
我们有两台来自 Hetzner 的云服务器。网络服务器是 Nginx。两台服务器是相同的(硬件、软件和我们的 Web 应用程序)。
LetsEncrypt 证书安装在两台服务器上。Nginx 配置为重定向http
到https
.
DNS 服务器是 Cloudflare。我们手动将域 A 记录的 IP 地址从服务器 A 切换到服务器 B,反之亦然。
现在我们已经在 Hetzer 中创建了一个负载均衡器,其中包含我们的两台服务器和一项服务:https 443 -> 443
.
一旦我们将我们域的 A 记录的 IP 地址更改为 LB 的 IP 地址,我们就会收到503 service unavailable
.
请协助。