文档简介:
概述
Nginx Ingress 简介

部署方案选型建议
方案1:Deployment + LB
在 TKE 上部署 Nginx Ingress 最简单的方式是将 Nginx Ingress Controller 以 Deployment 的方式部署,
并且为其创建 LoadBalancer 类型的 Service(自动创建负载均衡 CLB 或绑定已有 CLB),
使 CLB 接收外部流量,再转发到 Nginx Ingress 内部。如下图所示:

kubectl create ns nginx-ingress
kubectl apply -f https://raw.githubusercontent.com/TencentCloudContainerTeam/manifest
/master/nginx-ingress/nginx-ingress-deployment.yaml -n nginx-ingress
方案2:Daemonset + HostNetwork + LB

kubectl label node 10.0.0.3 nginx-ingress=true
kubectl create ns nginx-ingress
kubectl apply -f https://raw.githubusercontent.com/TencentCloudContainerTe
am/manifest/master/nginx-ingress/nginx-ingress-daemonset-hostnetwork.yaml -n nginx-ingress
方案3:Deployment + LB 直通 Pod
若网络模式是 VPC-CNI,且所有的 Pod 都使用弹性网卡,您可以使用 CLB 直接绑定弹性网卡的 Pod,
即绕过 NodePort,不用手动管理 CLB且支持自动扩、缩容。如下图所示:


kubectl create ns nginx-ingress
kubectl apply -f https://raw.githubusercontent.com/TencentCloudContainerTeam/manifest/
master/nginx-ingress/nginx-ingress-deployment-eni.yaml -n nginx-ingress
常见问题
如何支持内网 Ingress ?
方案2:Daemonset + HostNetwork + LB 是手动管理 CLB,在自行创建 CLB 时可以选择用公网或内网。
方案1:Deployment + LB 和 方案3:Deployment + LB 直通 Pod 默认创建公网 CLB。如果要用内网,
可以重新部署 YAML,给 nginx-ingress-controller 中的 Service 添加 key,例如 service.kubernetes.io
/qcloud-loadbalancer-internal-subnetid,value 为内网 CLB 创建的子网 id 的 annotation。请参考以下代码:
apiVersion: v1kind: Servicemetadata:annotations:service.kubernetes.io/qcloud-loadbalancer-internal-subnetid: subnet-xxxxxx
# value 替换为集群所在 vpc 的其中一个子网 id
labels:app: nginx-ingresscomponent: controllername: nginx-ingress-controller
如何复用已有 LB ?
方案1:Deployment + LB 和 方案3:Deployment + LB 直通 Pod 默认自动创建新的 CLB,
Ingress 的流量入口地址取决于新创建 CLB 的 IP 地址。如果业务对入口地址有依赖,
可以让 Nginx Ingress 绑定已有的 CLB。操作方法为重新部署 YAML,
给 nginx-ingress-controller 中的 Service 添加 key,例如 service.kubernetes.io/tke-existed-lbid,
value 为 CLB ID 的 annotation。请参考以下代码:
apiVersion: v1kind: Servicemetadata:annotations:service.kubernetes.io/tke-existed-lbid: lb-6swtxxxx # value 替换为 CLB 的 IDlabels:app: nginx-ingresscomponent: controllername: nginx-ingress-controller
Nginx Ingress 公网带宽有多大?
标准账户类型:指带宽上移到 CLB 或 IP 上管理。当您的账号是标准账户类型时,
Nginx Ingress 的带宽等于已购 CLB 的带宽,默认是 10Mbps(按量计费),可按需调整。
传统账户类型:指带宽在云服务器(CVM)上管理。 当您的账号是传统账户类型时
,Nginx Ingress 使用公网 CLB,Nginx Ingress 的公网带宽是 CLB 所绑定的 TKE
节点的带宽之和。如果使用 方案3:Deployment + LB 直通 Pod,CLB 直通 Pod,
即 CLB 直接绑定弹性网卡,那么此时 Nginx Ingress 的公网带宽是所有
Nginx Ingress Controller Pod 被调度到的节点上的带宽之和。
如何创建 Ingress?
当您在 TKE 上自行部署 Nginx Ingress,需使用 Nginx Ingress 管理 Ingress 时,
在容器服务控制台上无法创建 Ingress 时,可通过 YAML 的方式来创建
Ingress 并且需要给每个 Ingress 都指定 Ingress Class 的 annotation。请参考以下代码:
apiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata:name: test-ingressannotations:kubernetes.io/ingress.class: nginx # 这里是重点spec:rules:- host: *http:paths:- path: /backend:serviceName: nginx-v1servicePort: 80
如何监控?
通过 如何创建 Ingress 安装的 Nginx Ingress,已经暴露了 metrics 端口,
可以被 Prometheus 采集。如果集群内安装了 prometheus-operator,
可以使用 ServiceMonitor 来采集 Nginx Ingress 的监控数据。请参考以下代码:
apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:name: nginx-ingress-controllernamespace: nginx-ingresslabels:app: nginx-ingresscomponent: controllerspec:endpoints:- port: metricsinterval: 10snamespaceSelector:matchNames:- nginx-ingressselector:matchLabels:app: nginx-ingresscomponent: controller
- job_name: nginx-ingressscrape_interval: 5skubernetes_sd_configs:- role: endpointsnamespaces:names:- nginx-ingressrelabel_configs:- action: keepsource_labels:- __meta_kubernetes_service_label_app- __meta_kubernetes_service_label_componentregex: nginx-ingress;controller- action: keepsource_labels:- __meta_kubernetes_endpoint_port_nameregex: metrics

