云服务器内容精选

  • 添加Nginx Ingress 本节以Nginx作为工作负载并添加Nginx Ingress为例进行说明。 登录CCE控制台,单击集群名称进入集群。 选择左侧导航栏的“服务”,在右侧选择“路由”页签,单击右上角“创建路由”。 设置Ingress参数。 名称:自定义Ingress名称,例如nginx-ingress-demo。 命名空间:选择需要添加Ingress的命名空间。 对接Nginx:集群中已安装NGINX Ingress控制器插件后显示此选项,未安装该插件时本选项不显示。 前端协议:支持HTTP和HTTPS,安装NGINX Ingress控制器插件时预留的监听端口,默认HTTP为80,HTTPS为443。使用HTTPS需要配置相关证书。 证书来源:使用证书以支持HTTPS数据传输加密认证。 如果您选择“TLS密钥”,需要提前创建IngressTLS或kubernetes.io/tls类型的密钥证书,创建密钥的方法请参见创建密钥。 如果您选择“默认证书”,NGINX Ingress控制器会使用插件默认证书进行加密认证。选择“默认证书”将使用NGINX Ingress控制器自带证书。 SNI:SNI(Server Name Indication)是TLS的扩展协议,在该协议下允许同一个IP地址和端口号下对外提供多个基于TLS的访问 域名 ,且不同的域名可以使用不同的安全证书。开启SNI后,允许客户端在发起TLS握手请求时就提交请求的域名信息。负载均衡收到TLS请求后,会根据请求的域名去查找证书:若找到域名对应的证书,则返回该证书认证鉴权;否则,返回缺省证书(服务器证书)认证鉴权。 转发策略配置:请求的访问地址与转发规则匹配时(转发规则由域名、URL组成),此请求将被转发到对应的目标Service处理。单击“添加转发策略”按钮可添加多条转发策略。 域名:实际访问的域名地址。请确保所填写的域名已注册并备案,在Ingress创建完成后,将域名与自动创建的负载均衡实例的IP(即Ingress访问地址的IP部分)绑定。一旦配置了域名规则,则必须使用域名访问。 URL匹配规则: 默认:默认为前缀匹配。 前缀匹配:例如映射URL为/healthz,只要符合此前缀的URL均可访问。例如/healthz/v1,/healthz/v2。 精确匹配:表示只有URL完全匹配时,访问才能生效。例如映射URL为/healthz,则必须为此URL才能访问。 URL:需要注册的访问路径,例如:/healthz。 Nginx Ingress的访问路径匹配规则是基于“/”符号分隔的路径前缀匹配,并区分大小写。只要访问路径以“/”符号分隔后的子路径匹配此前缀,均可正常访问,但如果该前缀仅是子路径中的部分字符串,则不会匹配。例如URL设置为/healthz,则匹配/healthz/v1,但不匹配/healthzv1。 此处添加的访问路径要求后端应用内存在相同的路径,否则转发无法生效。 例如,Nginx应用默认的Web访问路径为“/usr/share/nginx/html”,在为Ingress转发策略添加“/test”路径时,需要应用的Web访问路径下也包含相同路径,即“/usr/share/nginx/html/test”,否则将返回404。 目标服务名称:请选择已有Service或新建Service。页面列表中的查询结果已自动过滤不符合要求的Service。 目标服务访问端口:可选择目标Service的访问端口。 操作:可单击“删除”按钮删除该配置。 注解:以“key: value”形式设置,可通过Annotations查询nginx-ingress支持的配置。 配置完成后,单击“确定”。 创建完成后,在Ingress列表可查看到已添加的Ingress。
  • networking.k8s.io/v1版本Ingress说明 CCE在v1.23版本集群开始Ingress切换到networking.k8s.io/v1版本。 v1版本参数相较v1beta1参数有如下区别。 ingress类型由annotations中kubernetes.io/ingress.class变为使用spec.ingressClassName字段。 backend的写法变化。 每个路径下必须指定路径类型pathType,支持如下类型。 ImplementationSpecific: 对于这种路径类型,匹配方法取决于具体Ingress Controller的实现。在CCE中会使用ingress.beta.kubernetes.io/url-match-mode指定的匹配方式,这与v1beta1方式相同。 Exact:精确匹配 URL 路径,且区分大小写。 Prefix:基于以 / 分隔的 URL 路径前缀匹配。匹配区分大小写,并且对路径中的元素逐个匹配。 路径元素指的是由 / 分隔符分隔的路径中的标签列表。
  • 前提条件 集群必须已安装NGINX Ingress 控制器,具体操作可参考安装插件。 Ingress为后端工作负载提供网络访问,因此集群中需提前部署可用的工作负载。若您无可用工作负载,可参考创建无状态负载(Deployment)、创建有状态负载(StatefulSet)或创建守护进程集(DaemonSet)部署工作负载。 为上述工作负载配置ClusterIP类型或NodePort类型的Service,可参考集群内访问(ClusterIP)或节点访问(NodePort)配置示例Service。
  • 步骤1:创建工作负载,并通过Ingress对外暴露服务 在cluster-1集群中部署应用,并测试访问。 复制以下文件保存到nginx-deploy.yaml文件。 apiVersion: apps/v1 kind: Deployment metadata: labels: version: v1 name: nginx namespace: default spec: selector: matchLabels: app: nginx version: v1 template: metadata: labels: app: nginx version: v1 spec: containers: - name: container-1 image: nginx:latest imagePullPolicy: IfNotPresent terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirst replicas: 1 --- apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx namespace: default spec: selector: app: nginx externalTrafficPolicy: Cluster ports: - name: cce-service-0 targetPort: 80 port: 80 protocol: TCP type: NodePort --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx namespace: default spec: rules: - host: example.com http: paths: - path: / backend: service: name: nginx port: number: 80 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: nginx 对cluster-1集群执行以下命令,创建工作负载。 kubectl apply -f nginx-deploy.yaml 在cluster-2集群中部署相同的应用,重复执行以上命令,创建相同的工作负载。
  • 高级Rewrite配置 对于一些复杂高级的Rewrite需求,可以通过如下注解来实现,其本质也是修改Nginx的配置文件(nginx.conf),可以实现上面提到的“nginx.ingress.kubernetes.io/rewrite-target”注解的功能,但是自定义程度更高,适合更加复杂的Rewrite需求。 nginx.ingress.kubernetes.io/server-snippet:在nginx.conf的“server”字段中添加自定义配置。 nginx.ingress.kubernetes.io/configuration-snippet:在nginx.conf的“location”字段中添加自定义配置。 snippet配置在NGINX Ingress控制器版本为2.4.6版本及以上时(对应社区版本为v1.9.3)不再默认启用,详情请参见Changelog。如果您仍需要使用snippet配置,可以通过allow-snippet-annotations启用。 通过以上两个注解可以在nginx.conf中的“server”或“location”字段中插入Rewrite指令,完成URL的重写,示例如下: annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/configuration-snippet: | rewrite ^/stylesheets/(.*)$ /something/stylesheets/$1 redirect; # 添加 /something 前缀 rewrite ^/images/(.*)$ /something/images/$1 redirect; # 添加 /something 前缀 如上两条规则在访问URL中添加了“/something”路径,即: 当用户访问rewrite.bar.com/stylesheets/new.css时,重写为rewrite.bar.com/something/stylesheets/new.css 当用户访问rewrite.bar.com/images/new.jpg时,重写为rewrite.bar.com/something/images/new.jpg