加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

航旅业是网络安全的重灾区

发布时间:2021-02-11 14:51:55 所属栏目:动态 来源:互联网
导读:4. 通过 Hooks 与 Init 容器执行自定义行为 我们希望在 Kubernetes 系统中实现的核心目标之一,在于尝试为现有开发人员提供近乎零停机时间的部署支持。但不同应用程序往往拥有不同的关闭方式与资源清理过程,因此整体零停机目标很难实现。首先横亘在我们面前

4. 通过 Hooks 与 Init 容器执行自定义行为

我们希望在 Kubernetes 系统中实现的核心目标之一,在于尝试为现有开发人员提供近乎零停机时间的部署支持。但不同应用程序往往拥有不同的关闭方式与资源清理过程,因此整体零停机目标很难实现。首先横亘在我们面前的,就是 Nginx 这道难关。我们注意到在启动 Pod 的滚动部署时,活动连接在成功终止之前就会被丢弃。经过广泛的在线研究,事实证明 Kubernetes 在终止 Pod 之前,并不会等待 Nginx 用尽其连接资源。使用预停止 hook,我们得以注入此项功能,并由此实现了零停机时间。
 

您还可以添加其他一些配置选项:

  • initialDelaySeconds- 容器启动的多少秒后,探针开始实际运行
  • periodSeconds- 两次探测之间的等待间隔
  • timeoutSeconds- 需要经过多少秒,才能判定某一 Pod 处于故障状态。相当于传统意义上的超时指标
  • failureThreshold- 探针失败多少次后,才向 Pod 发出重启信号
  • successThreshold- 探针成功多少次后,才能判定 Pod 进入就绪状态(通常使用在 Pod 启动或者故障恢复之后)

3. 设置默认 Pod 网络策略

Kubernetes 使用一种“扁平”网络拓扑;在默认情况下,所有 Pod 之间都可以直接相互通信。但结合实际用例,这种通信能力往往不必要甚至不可接受。由此带来的一大潜在安全隐患在于,如果某一易受攻击的应用程序遭到利用,则攻击者即可由此获取完全访问权限,进而将流量发送至网络上的所有 Pod 当中。因此我们也有必要在 Pod 网络中应用最低访问原则,在理想情况下通过网络策略明确指定哪些容器之间允许建立相互连接。

以下列简单策略为例,可以看到其将拒绝特定命名空间中的所有入口流量:
 

这里需要强调的一点在于,资源限制越严格,Pod 的调度难度也就越大。这是因为 Pod 调度要求目标节点拥有充足的资源。例如,如果您的资源非常有限(内存只有 4GB),那么即使是运行轻量级 Web 服务器进程都很可能非常困难。在这种情况下,大家需要进行横向扩展,而且各个新容器也应运行在同样拥有至少 4GB 可用内存的节点之上。如果不存在这样的节点,您需要在集群中引入新节点以处理该 Pod,这无疑会令启动时间有所增加。总之,请务必在资源请求与限制之间找到最小“边界”,保证快速、平衡实现扩展。

2. 配置 Liveness 与 Readiness 探针

Kubernetes 社区中经常讨论的另一个有趣话题,就是如何配置 Linvess 与 Readiness 探针。合理使用这两种探针,能够为我们带来一种运行容错软件、并最大程度减少停机时间的机制。但如果配置不正确,它们也可能对应用程序造成严重的性能影响。下面来看这两种探针的基本情况,以及如何进行使用判断:

Liveness 探针:“用于指示容器是否正在运行。如果 Liveness 探针失败,则 kubelet 将关闭容器,且容器将开始执行重新启动策略。如果容器并不提供 Liveness 探针,则其默认状态被视为成功。”—Kubernetes说明文档

Liveness 探针的资源需求必须很低,因为它们需要频繁运行,并需要在应用程序运行时向 Kubernetes 发出通知。请注意,如果将其设置为每秒运行一次,则系统将需要承担每秒 1 次的额外请求处理量。因此,请务必认真考虑如何处理这些额外请求及相应资源。在 GumGum,我们将 Liveness 探针设置为在应用程序主组件运行时进行响应,且不考虑数据是否已经完全可用(例如来自远程数据库或缓存的数据)。举例来说,我们会在应用当中设置一个特定的“health”端点,单纯负责返回 200 响应代码。只要仍在返回响应,就表明该进程已经启动并可以处理请求(但尚未正式产生流量)。

Readiness 探针:“指示容器是否准备好处理请求。如果 Readiness 探针失败,则端点控制器将从与该 Pod 相匹配的所有服务端点中,删除该 Pod 的 IP 地址。”

Readiness 探针的运行成本要高得多,因为其作用在于持续告知后端,整个应用程序正处于运行状态且准备好接收请求。关于此探针是否应该访问数据库,社区中存在诸多争论。考虑到 Readiness 探针造成的开销(需要经常运行,但频繁可以灵活调整),我们决定在某些应用程序中只在从数据库返回记录后,才开始“提供流量”。通过对 Readiness 探针的精心设计,我们已经能够实现更高的可用性水平以及零停机时间部署。

但如果大家确实有必要通过应用程序的 Readiness 探针随时检查数据库请求的就绪状态,请尽可能控制查询操作的资源用量,例如……

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!