写点什么

48 K8S 之 Ingress 控制器部署

  • 2021 年 12 月 18 日
  • 本文字数:750 字

    阅读完需:约 2 分钟

48 K8S之Ingress控制器部署

Deployment 控制器管理 Ingress 控制器的 Pod 资源,通过 NodePort 或 LoadBalancer 类型的 Service 对象或者通过拥有外部 IP 地址(externalIP)的 Service 对象为其接入集群外部的请求流量。这意味着,在生产环境中定义一个 Ingress 控制器时,必须在其前端定义一个负载均衡器,负载均衡器可以是 LoadBalancer 类型的 Service,或用户自行管理的边缘路由器

借助 DaemonSet 控制器,Ingress 控制器的各 Pod 分别以单一实例的方式运行在 Kubernetes 集群中所有或部分工作节点之上,并配置这类 Pod 对象以 hostPort 或 hostNetwork 的方式在当前节点接入外部流量。

生产应用场景中,我们通常会以 DaemonSet 结合 NodeAffinity、PodAntiAffinity 使用,甚至是利用 Taints/Tolerations 调度机制将 Ingress 控制器以单实例的方式运行在专用的节点之上,并让 Ingress 控制器共享相关节点的名称空间,或者在 Service 上使用 externalIP 等来解决引入外部流量的问题。


Ingress Nginx 应用程序还存在许多其他配置需要,例如日志格式、CORS、URL 重写、代理缓冲和 SSL 透传等。这类的配置通常有 ConfigMap、Annotations 和自定义模板 3 种实现方式


Ingress Nginx 的 ConfigMap 和 Annotations 配置接口都支持使用大量的参数来定制所需要的功能,不同的是,ConfigMap 通过在 Ingress Nginx 引用 ConfigMap 资源规范中 data 字段特定的键及可用取值进行定义,且多用于 Nginx 全局特性的定制,因而是集群级别的配置;而 Annotations 则于 Ingress 资源上使用资源注解配置,多用于虚拟主机级别,因而通常是服务级别的配置。


将服务发布到集群外部的常用方式是将 Service 资源的类型修改为 NodePort 或 LoadBalancer,但 NodePort 将会把端口映射为某个不知名端口,甚至是随机端口,而 LoadBalancer 则依赖于公有云环境中的 LBaaS 服务,二者均存在着诸多限制。在 Kubernetes 上,Ingress 才是发布 HTTP 应用的更好的方式


发布于: 1 小时前阅读数: 6
用户头像

InfoQ签约作者 2018.11.30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
48 K8S之Ingress控制器部署