K8s Ingress Questions

如果在 公众号 文章发现状态为 已更新, 建议点击 查看原文 查看最新内容。

状态: 未更新

原文链接: https://typonotes.com/posts/2023/03/28/k8s-ingress-questions/

1. 常说的 Ingress 值的是什么。

首先拉平一个认识。

常说的 Ingress 是 Ingress Rules。

但 Ingerss 实际上是由 Ingress Rules 和 Ingress Controller 的组合而成的。 在使用上, K8S 通过 Rules 的管理, 隐藏 Controller。

目前 k8s 官方维护的 控制器(Controller) 有 AWS, GCS, Nginx, 其他三方的大大小小几十种, 可以参考 https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress-controllers/

而 Rules 是 K8S 对于控制器的配置的公共抽象, 帮助用户 一定程度上 屏蔽了不同控制器的差异。

所谓 一定程度, 指的是

  1. 在 (1) 通过 annotations 的值管理 控制器 的特殊。 不同的控制器支持的字段和功能不一致。
  2. 在 (2) spec 内是 通用配置。 内容格式 所有控制器都必须遵守。

以下是群友提问了

2.1. 我这边没买LB,公司的二级域名解析到的WORKER 节点(2个) DNS全部解析过来了(轮询) 然后我想是否可以不买LB场景下实现 域名转发service ssl

可以

  1. 可以将 控制器 的 Service 设置 NodePort。 使用这种方法, 对外端口无法使用标准的 80/443。
  2. 可以在 控制器 的 Deployment/DaemonSet 中, 设置 HostPort。 这种方式对外可以使用 80/443。

但是不建议。

  1. 其一、 如果要提供公网访问服务的话, 必然会 将 Node 节点绑定公网 IP 暴露到互联网。
  2. 其二、 通过 DNS 可以在解析层面轮训, 实现 负载均衡。 但是 DNS 本身没办法做健康检查, 如果某个 Node 节点挂了, 服务就无法被访问。

例如上图, 当 1-2 两个节点失效时, DNS 依旧会将请求解析过来, 造成失败。

2.2. 我这块域名 dns 解析到的是2台worker,是否要用 daemonset 部署 Ingress 控制器?

可以, 但没必要。 使用 DNS 或者 LB 作为负载均衡的前提条件, 重要的都是 关系映射。 即当节点发生变化的时候, 如何 保证只有健康的控制器节点对外提供业务?

一般情况下保持 2-3个 worker 副本几本够用了。 可根据实际情况调整。