K8s Ingress Questions

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

状态: 未更新

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

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

首先拉平一个认识。

常说的 Ingress 是 Ingress Rules

但 Ingerss 实际上是由 Ingress RulesIngress 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 副本几本够用了。 可根据实际情况调整。