云服务器内容精选
-
配置参数说明 表1 nginx-ingress主要参数配置 参数 描述 controller.image.repository ingress-nginx镜像地址,建议与CCE提供的Nginx Ingress插件镜像一致,也可自定义。 Nginx Ingress插件镜像:Nginx Ingress插件的镜像地址可通过已安装插件实例的YAML文件查看。例如“华东-上海一”区域的插件镜像地址为“swr.cn-east-3.myhuaweicloud.com/hwofficial/nginx-ingress”,该地址需要根据集群所在区域进行替换。 自定义:自定义地址需要保证镜像可拉取。 controller.image.registry 镜像仓库域名,该参数需要与controller.image.image同时填写。 如已填写controller.image.repository,则无需再填写该参数,建议将controller.image.registry和controller.image.image设为空值。 controller.image.image 镜像名称。该参数需要与controller.image.registry同时填写。 如已填写controller.image.repository,则无需再填写该参数,建议将controller.image.registry和controller.image.image设为空值。 controller.image.tag ingress-nginx镜像版本,建议与CCE提供的Nginx Ingress插件镜像一致,也可自定义。 Nginx Ingress插件的镜像版本可通过已安装插件实例的YAML文件查看,需要根据插件版本进行替换。 controller.ingressClass 设置Ingress Controller所对应的IngressClass的名称。 说明: 同一个集群中不同套Ingress Controller名称必须唯一,且不能设置为nginx和cce(nginx是集群默认Nginx Ingress Controller的监听标识,cce则是使用ELB Ingress Controller的配置)。 示例:ccedemo controller.image.digest 建议为空值,该参数非空时可能无法拉取CCE提供的Nginx Ingress插件镜像。 controller.ingressClassResource.name 需要与ingressClass值相同。 示例:ccedemo controller.ingressClassResource.controllerValue 同一个集群中不同套Ingress Controller的监听标识必须唯一,且不能设置为k8s.io/ingress-nginx(k8s.io/ingress-nginx是默认Nginx Ingress Controller的监听标识)。 示例:k8s.io/ingress-nginx-demo controller.config nginx配置参数,配置参数范围请参考社区文档。不在范围内的参数配置不会生效。 建议增加如下配置: "keep-alive-requests": "100" controller.extraInitContainers init容器,在主容器启动前执行,可用于Pod参数的初始化配置。 配置参数示例请参见高并发业务场景参数优化。 controller.admissionWebhooks.enabled 是否开启admissionWebhooks,可以对Ingress对象进行有效性校验,避免因配置错误导致ingress-controller不断重新加载资源,导致业务中断。 此处设置为false,表示不开启。如需开启,请参见admissionWebhook配置示例。 controller.admissionWebhooks.patch.enabled 同上,表示是否开启admissionWebhooks。此处设置为false。 controller.service.annotations Key: value类型,此处需加上ELB ID,如下所示: kubernetes.io/elb.id: 5083f225-9bf8-48fa-9c8b-67bd9693c4c0 独享型负载均衡还需要加上elb.class,如下所示: kubernetes.io/elb.class: performance controller.resources.requests.cpu Nginx controller的CPU资源申请值,可根据需求自定义。 controller.resources.requests.memory Nginx controller的内存资源申请值,可根据需求自定义。 defaultBackend.image.repository default-backend镜像地址,建议与CCE提供的Nginx Ingress插件镜像一致,也可自定义。 Nginx Ingress插件镜像:Nginx Ingress插件的镜像地址可通过已安装插件实例的YAML文件查看。例如“华东-上海一”区域的插件镜像地址为“swr.cn-east-3.myhuaweicloud.com/hwofficial/defaultbackend”,该地址需要根据集群所在区域进行替换。 自定义:自定义地址需要保证镜像可拉取。 defaultBackend.image.tag default-backend镜像版本,建议与CCE提供的Nginx Ingress插件镜像一致,也可自定义。 更多参数配置说明请参见ingress-nginx。
-
解决方案 您可以通过以下方案,实现在同一个集群中部署多个Nginx Ingress Controller。 安装基于Nginx Ingress Controller的插件nginx-ingress,在同一个集群中一键部署多个实例。 v1.23集群需安装2.2.52及以上版本的插件,对于v1.23以上的集群需安装2.5.4及以上版本的插件。 通过安装开源Helm包,在集群中自定义部署多套Nginx Ingress Controller。 在Nginx Ingress Controller启动时,您可以通过配置ingress-class参数来声明自己监听的 Ingress 配置类范围,其缺省值为nginx。这样在创建Ingress时可以通过选择不同的Nginx Ingress Controller进行流量区分。
-
应用现状 Nginx Ingress Controller是一款业界流行的开源Ingress控制器,有着广泛的应用。在大规模集群场景下,用户有在集群中部署多套Nginx Ingress Controller的诉求,不同流量使用不同的控制器,将流量区分开。例如,集群中部分服务需要通过公网Ingress方式对外提供访问,但是又有部分对内开放的服务不允许使用公网访问,只支持对同VPC内的其他服务访问,您可以通过部署两套独立的Nginx Ingress Controller,绑定两个不同的ELB实例来满足这类需求场景。 图1 多个Nginx Ingress应用场景
-
部署Nginx Ingress Controller 您可以通过以下步骤在集群中部署多套完全独立的Nginx Ingress Controller服务。 获取模板包。 前往社区模板发布页面,选择合适的版本并下载tgz格式的Helm Chart包。本文以社区4.4.2版本的模板包为例,该模板包适用于v1.21及以上的CCE集群。由于不同版本的模板包配置项可能存在差异,本文中的配置仅对4.4.2版本生效。 上传模板 登录CCE控制台,进入集群,在左侧导航栏中选择“应用模板”,在右上角单击“上传模板”。 单击“添加文件”,选中待上传的模板包后,单击“上传”。 自定义value.yaml 您可在本地创建一个value.yaml配置文件用于设置安装工作负载参数,在安装时只需导入此配置文件进行自定义安装,其他未指定的参数将会使用默认配置。 配置内容如下: controller: image: repository: swr.cn-east-3.myhuaweicloud.com/hwofficial/nginx-ingress #controller镜像地址,请根据集群所在区域进行替换 registry: "" image: "" tag: "v1.5.1" #controller版本 digest: "" ingressClassResource: name: ccedemo #同一个集群中不同套Ingress Controller名称必须唯一,且不能设置为nginx和cce controllerValue: "k8s.io/ingress-nginx-demo" #同一个集群中不同套Ingress Controller的监听标识必须唯一,且不能设置为k8s.io/ingress-nginx ingressClass: ccedemo #同一个集群中不同套Ingress Controller名称必须唯一,且不能设置为nginx和cce service: annotations: kubernetes.io/elb.id: 5083f225-9bf8-48fa-9c8b-67bd9693c4c0 #ELB ID kubernetes.io/elb.class: performance #仅独享型ELB需要添加此注解 config: keep-alive-requests: 100 extraVolumeMounts: # 挂载节点上的/etc/localtime文件,进行时区同步 - name: localtime mountPath: /etc/localtime readOnly: true extraVolumes: - name: localtime type: Hostpath hostPath: path: /etc/localtime admissionWebhooks: # 关闭webhook验证开关 enabled: false patch: enabled: false resources: # 设定controller的资源限制,可根据需求自定义 requests: cpu: 200m memory: 200Mi defaultBackend: # 设置defaultBackend enabled: true image: repository: swr.cn-east-3.myhuaweicloud.com/hwofficial/defaultbackend #defaultBackend镜像地址,请根据集群所在区域进行替换 registry: "" image: "" tag: "1.5" digest: "" 上述参数详情请参见表1。 创建模板实例。 登录CCE控制台,进入集群,在左侧导航栏中选择“应用模板”。 在已上传的模板中,单击“安装”。 填写“实例名称”,选择“命名空间”和“选择版本”。 单击“配置文件”后的“添加文件”按钮,选择本地创建的YAML配置文件,单击“安装”。 在“模板实例”页签下可以查看模板实例的安装情况。
-
测试验证 创建一个工作负载,配置新部署的Nginx Ingress Controller为其提供网络访问。 创建nginx工作负载。 登录CCE控制台,进入集群,在左侧导航栏中选择“工作负载”,单击右上角“YAML创建”。 填写以下内容,并单击“确定”。 apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - image: nginx #若使用“开源镜像中心”的镜像,可直接填写镜像名称;若使用“我的镜像”中的镜像,请在SWR中获取具体镜像地址。 imagePullPolicy: Always name: nginx imagePullSecrets: - name: default-secret --- apiVersion: v1 kind: Service metadata: labels: app: nginx name: nginx spec: ports: - name: service0 port: 80 # 访问Service的端口 protocol: TCP # 访问Service的协议,支持TCP和UDP targetPort: 80 # Service访问目标容器的端口,本例中nginx镜像默认使用80端口 selector: # 标签选择器,Service通过标签选择Pod,将访问Service的流量转发给Pod app: nginx type: ClusterIP # Service的类型,ClusterIP表示在集群内访问 创建Ingress,通过新部署的Nginx Ingress Controller提供网络访问。 在左侧导航栏中选择“服务”,切换至“路由”页签,单击右上角“YAML创建”。 对接非插件部署的Nginx Ingress Controller时,只支持使用YAML的方式创建Ingress。 填写以下内容,并单击“确定”。 v1.23及以上版本集群: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-test namespace: default spec: ingressClassName: ccedemo # 填写新创建的nginx ingress controller的ingressClass rules: - host: foo.bar.com http: paths: - path: / pathType: ImplementationSpecific #匹配取决于 IngressClass backend: service: name: nginx #替换为您的目标服务名称 port: number: 80 #替换为您的目标服务端口 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH v1.23以下版本集群: apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: tomcat-t1 namespace: test annotations: kubernetes.io/ingress.class: ccedemo # 填写新创建的nginx ingress controller的ingressClass spec: rules: - host: foo.bar.com http: paths: - path: / pathType: ImplementationSpecific backend: serviceName: nginx #替换为您的目标服务名称 servicePort: 80 #替换为您的目标服务端口 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH 登录集群节点,分别通过集群Nginx Ingress插件中的Controller和新部署的Nginx Ingress Controller服务来访问该应用。 通过新建的Nginx Ingress Controller服务来访问该应用(预期返回Nginx页面),其中192.168.114.60为新建的Nginx Ingress Controller服务对应的ELB地址。 curl -H "Host: foo.bar.com" http://192.168.114.60 通过Nginx Ingress插件中的Controller服务(预期返回404),其中192.168.9.226为Nginx Ingress插件对应的ELB地址。 curl -H "Host: foo.bar.com" http://192.168.9.226
-
admissionWebhook配置 Nginx Ingress Controller支持admissionWebhook配置,通过设置controller.admissionWebhook参数,可以对Ingress对象进行有效性校验,避免因配置错误导致ingress-controller不断重新加载资源,导致业务中断。 使用admissionWebhook特性时,APIServer需要开启webhook相关配置,必须包含MutatingAdmissionWebhook与ValidatingAdmissionWebhook 特性开关为 --admission-control=MutatingAdmissionWebhook,ValidatingAdmissionWebhook 如未开启,需要提交工单申请开启。 开启admissionWebhook特性后,如需卸载重装Nginx Ingress Controller,会有Secret残留,需要手动清理。 开启admissionWebhook的value.yaml配置文件如下: controller: image: repository: swr.cn-east-3.myhuaweicloud.com/hwofficial/nginx-ingress #controller镜像地址,请根据集群所在区域进行替换 registry: "" image: "" tag: "v1.5.1" #controller版本 digest: "" ingressClassResource: name: ccedemo #同一个集群中不同套Ingress Controller名称必须唯一,且不能设置为nginx和cce controllerValue: "k8s.io/ingress-nginx-demo" #同一个集群中不同套Ingress Controller的监听标识必须唯一,且不能设置为k8s.io/ingress-nginx ingressClass: ccedemo #同一个集群中不同套Ingress Controller名称必须唯一,且不能设置为nginx和cce service: annotations: { kubernetes.io/elb.id: 5083f225-9bf8-48fa-9c8b-67bd9693c4c0 #ELB ID kubernetes.io/elb.class: performance #仅独享型ELB需要添加此注解 } config: { "keep-alive-requests": "100" } extraVolumeMounts: # 挂载节点上的/etc/localtime文件,进行时区同步 - name: localtime mountPath: /etc/localtime readOnly: true extraVolumes: - name: localtime type: Hostpath hostPath: path: /etc/localtime admissionWebhooks: annotations: {} enabled: true extraEnvs: [] failurePolicy: Fail port: 8443 certificate: "/usr/local/certificates/cert" key: "/usr/local/certificates/key" namespaceSelector: {} objectSelector: {} labels: {} existingPsp: "" networkPolicyEnabled: false service: annotations: {} externalIPs: [] loadBalancerSourceRanges: [] servicePort: 443 type: ClusterIP createSecretJob: resources: #注释{} limits: cpu: 20m memory: 40Mi requests: cpu: 10m memory: 20Mi patchWebhookJob: resources: {} patch: enabled: true image: registry: registry.k8s.io #registry.k8s.io为webhook官网镜像仓库,需要替换成自己镜像所在仓库地址 image: ingress-nginx/kube-webhook-certgen #webhook镜像 tag: v1.1.1 digest: "" pullPolicy: IfNotPresent priorityClassName: "" podAnnotations: {} nodeSelector: kubernetes.io/os: linux tolerations: [] labels: {} securityContext: runAsNonRoot: true runAsUser: 2000 fsGroup: 2000 resources: # 设定controller的资源限制,可根据需求自定义 requests: cpu: 200m memory: 200MidefaultBackend: # 设置defaultBackend enabled: true image: repository: swr.cn-east-3.myhuaweicloud.com/hwofficial/defaultbackend #defaultBackend镜像地址,请根据集群所在区域进行替换 registry: "" image: "" tag: "1.5" digest: "" 验证Ingress配置错误annotation场景下,admissionWebhook是否会进行校验。 例如,为Ingress配置以下错误的annotation: ... annotations: nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "false" nginx.ingress.kubernetes.io/auth-tls-verify-client: optional nginx.ingress.kubernetes.io/auth-tls-verify-depth: "1"... 创建此Ingress服务,将会出现以下拦截信息:
-
高并发业务场景参数优化 针对高并发业务场景,可通过参数配置进行优化: 通过ConfigMap对Nginx Ingress Controller整体参数进行优化。 通过InitContainers对Nginx Ingress Controller内核参数进行优化。 优化后的value.yaml配置文件如下: controller: image: repository: swr.cn-east-3.myhuaweicloud.com/hwofficial/nginx-ingress #controller镜像地址,请根据集群所在区域进行替换 registry: "" image: "" tag: "v1.5.1" #controller版本 digest: "" ingressClassResource: name: ccedemo #同一个集群中不同套Ingress Controller名称必须唯一,且不能设置为nginx和cce controllerValue: "k8s.io/ingress-nginx-demo" #同一个集群中不同套Ingress Controller的监听标识必须唯一,且不能设置为k8s.io/ingress-nginx ingressClass: ccedemo #同一个集群中不同套Ingress Controller名称必须唯一,且不能设置为nginx和cce service: annotations: { kubernetes.io/elb.id: 5083f225-9bf8-48fa-9c8b-67bd9693c4c0 #ELB ID kubernetes.io/elb.class: performance #仅独享型ELB需要添加此注解 }# Nginx参数优化 config: { "keep-alive-requests": "10000", "upstream-keepalive-connections": "200", "max-worker-connections": "65536" } # 内核参数优化 extraInitContainers: - name: init-myservice image: busybox securityContext: privileged: true command: ['sh', '-c', 'sysctl -w net.core.somaxconn=65535;sysctl -w net.ipv4.ip_local_port_range="1024 65535"'] extraVolumeMounts: # 挂载节点上的/etc/localtime文件,进行时区同步 - name: localtime mountPath: /etc/localtime readOnly: true extraVolumes: - name: localtime type: Hostpath hostPath: path: /etc/localtime admissionWebhooks: # 关闭webhook验证开关 enabled: false patch: enabled: false resources: # 设定controller的资源限制,可根据需求自定义 requests: cpu: 200m memory: 200MidefaultBackend: # 设置defaultBackend enabled: true image: repository: swr.cn-east-3.myhuaweicloud.com/hwofficial/defaultbackend #defaultBackend镜像地址,请根据集群所在区域进行替换 registry: "" image: "" tag: "1.5" digest: ""
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格