您可以根据不同的业务场景需求,使用以下几种安装方案在容器服务 TKE 中安装 Nginx-ingress。
Nginx 作为关键的流量接入网关,不建议您将 Nginx 与其他业务部署在相同的节点内。推荐您使用指定的节点池来部署 Nginx-ingress。部署架构如下图所示:
请参考以下步骤进行安装:
说明:使用此安装方式,您可以完整享有节点池快速扩缩容的能力,后续您只要调整节点池的数量,即可扩缩容 Nginx 的副本。
使用 Deployment + HPA 的形式部署 Nginx-ingress,您可以根据业务需要配置污点和容忍将 Nginx 和业务 Pod 分散部署。同时搭配 HPA,可设置 Nginx 根据 CPU / 内存等指标进行弹性伸缩。部署架构如下图所示:
仅部署 Nginx 在集群内将无法接收外部流量,还需配置 Nginx 的前端 LB。TKE 现已提供产品化的安装能力,您也可以根据业务需要选择不同的部署模式。
如果您的集群是 VPC-CNI 模式的集群,推荐您使用 CLB 直通 Nginx 的 Serivce。下图为以节点池部署的负载示例。
当前方案性能好,而且不需要手动维护 CLB,是最理想的方案。需要集群支持 VPC-CNI,如果您的集群已配置 VPC-CNI 网络插件,或者已配置 Global Router 网络插件并开启了 VPC-CNI 的支持(两种模式混用),建议使用此方案。
如果您的集群不支持 VPC-CNI 模式网络,您也可以通过常规的 Loadbalancer 模式 Service 接入流量。
当前 TKE 上 LoadBalancer 类型的 Service 默认实现是基于 NodePort,CLB 会绑定各节点的 NodePort 作为后端 RS,将流量转发到节点的 NodePort,然后节点上再通过 iptables 或 ipvs 将请求路由到 Service 对应的后端 Pod。这种方案是最简单的方案,但流量会经过一层 NodePort,会多一层转发。可能存在以下问题:
控制台暂不支持,您可以手动修改 Nginx 工作负载的 Yaml 配置网络模式为 HostNetwork,手动创建 CLB 绑定 Nginx 暴露的节点端口。
需要注意使用 hostNetwork 时,为避免端口监听冲突,Nginx-ingress 的 Pod 不能被调度到同一节点。
您可以在 Nginx-ingress 组件详情页,Ningx 参数 tab 中选择的 Nginx-ingress 实例进行 YAML 编辑。
注意:默认情况下配置参数不会重启 Nginx,生效时间有细微延迟。
apiVersion: v1
kind: ConfigMap
metadata:
name: alpha-ingress-nginx-controller
namespace: kube-system
data:
access-log-path: /var/log/nginx/nginx_access.log
error-log-path: /var/log/nginx/nginx_error.log
log-format-upstream: $remote_addr - $remote_user [$time_iso8601] $msec "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_length $request_time [$proxy_upstream_name] [$proxy_alternative_upstream_name] [$upstream_addr] [$upstream_response_length] [$upstream_response_time] [$upstream_status] $req_id
keep-alive-requests: "10000"
max-worker-connections: "65536"
upstream-keepalive-connections: "200"
注意:
access-log-path
、error-log-path
、log-format-upstream
。若修改则会对 CLS 日志采集造成影响。
本页内容是否解决了您的问题?