如何正确安装并配置ingress?

2026-05-27 15:111阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1049个文字,预计阅读时间需要5分钟。

如何正确安装并配置ingress?

说明:

1.k8s版本:v1.23;

2.内网测试环境:1台master节点,2台node节点;

3.部署方式:使用DaemonSet、HostNetwork、nodeSelector;

4.部署ingress-nginx到node02节点;

5.node02节点打标签为边缘节点。

说明:

​ 1.k8s版本:v1.23;

​ 2.内网测试环境1台master,2台node节点,使用 DaemonSet+HostNetwork+nodeSelector 方式部署 ingress-nginx 到 node02 节点,node02打标签作为边缘节点;

​ 3.测试了www.xx.com:30076,其中30076kubectl get svc -n ingress-nginxsvc暴露出来的nodeport端口。

  1. DaemonSet+HostNetwork+nodeSelector(推荐)

    DaemonSet结合nodeselector来部署ingress-controller到特定的node上(边缘节点),然后使用HostNetwork直接把该pod与宿主机node的网络打通,直接使用宿主机的80/433端口就能访问服务。这时,ingress-controller所在的node机器就很类似传统架构的边缘节点,比如机房入口的nginx服务器。

    优点:

    • 该方式整个请求链路最简单,性能相对NodePort模式更好。

    缺点:

    • 由于直接利用宿主机节点的网络和端口,一个node只能部署一个ingress-controller pod

    因为此次是内网测试环境,所以使用第3中方法部署测试


使用Helm以DaemonSet+HostNetwork+nodeSelector的方式部署ingress-nginx

nginx-ingress-controall官网:kubernetes.github.io/ingress-nginx/

现有的测试环境是1台master+2台node,我们选择node02做为边缘节点,给他打上边缘节点的标签,这样部署的ingress-controallpod会只跑在node02这个节点上。(如果是生产环境,可以选择2台node作为边缘节点,为了避免单点故障,可使用keepalive提高高可用)

#给node02节点打上边缘节点的标签 kubectl label nodes node02 edgenode=true #查看各节点的标签 kubectl get node --show-labels

拉取helm源:

#添加helm源 helm repo add ingress-nginx kubernetes.github.io/ingress-nginx #更新源 helm repo update #拉取相关配置修改values.yaml helm pull ingress-nginx/ingress-nginx

修改values.yaml

commonLabels: {} controller: name: controller image: registry: k8s.gcr.io #如果怕墙此处可换为阿里镜像源 image: ingress-nginx/controller tag: "v1.1.1" digest: sha256:0bc88eb15f9e7f84e8e56c14fa5735aaa488b840983f87bd79b1054190e660de pullPolicy: IfNotPresent runAsUser: 101 allowPrivilegeEscalation: true existingPsp: "" containerName: controller containerPort: nginx-test.wdyxgames.com访问成功,nginx-test1.wdyxgames.com因为没有在ingress中定义返回的是defaultbakend中的nginx返回的页面

ingress-nginx配置使用证书支持https
  1. 首先把证书导入到k8ssecret中去:

    kubectl create secret tls wdyxgames-tls --key _.wdyxgames.com.key --cert _.wdyxgames.com.crt -n nginx-test

  2. 再创建个ingress资源文件指定使用https

    #test-nginx-ingress-https.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: "nginx" name: example spec: rules: # 一个ingress可以配置多个rules - host: nginx-test.wdyxgames.com # 域名配置,可以不写,匹配*,此域名就是浏览器里访问的URL http: paths: # 相当于nginx的location,同一个host可以配置多个path,此处我们写所有 - backend: service: name: nginx-test-service # 代理到哪个svc,与上面创建的测试后端svc对应 port: number: 80 # svc暴露出来的端口,与上面创建的测试后端svc对应 path: / pathType: Prefix tls: - hosts: - nginx-test.wdyxgames.com secretName: wdyxgames-tls

    对比上面,只是添加了tls处的内容:

    #使用命令创建 kubectl apply -f test-nginx-ingress-https.yaml -n nginx-test ##### Error from server (BadRequest): error when creating "test-nginx-ingress-https.yaml": admission webhook "validate.nginx.ingress.kubernetes.io" denied the request: host "nginx-test.wdyxgames.com" and path "/" is already defined in ingress nginx-test/example #会有报错,是因为的http的ingress已经创建对应的转发关系,不可再创建 #删掉之前http的ingress,再创建 kubectl delete -f test-nginx-ingress.yaml -n nginx-test

  3. 使用浏览器访问,可见已经支持https访问了:

如何正确安装并配置ingress?

本文共计1049个文字,预计阅读时间需要5分钟。

如何正确安装并配置ingress?

说明:

1.k8s版本:v1.23;

2.内网测试环境:1台master节点,2台node节点;

3.部署方式:使用DaemonSet、HostNetwork、nodeSelector;

4.部署ingress-nginx到node02节点;

5.node02节点打标签为边缘节点。

说明:

​ 1.k8s版本:v1.23;

​ 2.内网测试环境1台master,2台node节点,使用 DaemonSet+HostNetwork+nodeSelector 方式部署 ingress-nginx 到 node02 节点,node02打标签作为边缘节点;

​ 3.测试了www.xx.com:30076,其中30076kubectl get svc -n ingress-nginxsvc暴露出来的nodeport端口。

  1. DaemonSet+HostNetwork+nodeSelector(推荐)

    DaemonSet结合nodeselector来部署ingress-controller到特定的node上(边缘节点),然后使用HostNetwork直接把该pod与宿主机node的网络打通,直接使用宿主机的80/433端口就能访问服务。这时,ingress-controller所在的node机器就很类似传统架构的边缘节点,比如机房入口的nginx服务器。

    优点:

    • 该方式整个请求链路最简单,性能相对NodePort模式更好。

    缺点:

    • 由于直接利用宿主机节点的网络和端口,一个node只能部署一个ingress-controller pod

    因为此次是内网测试环境,所以使用第3中方法部署测试


使用Helm以DaemonSet+HostNetwork+nodeSelector的方式部署ingress-nginx

nginx-ingress-controall官网:kubernetes.github.io/ingress-nginx/

现有的测试环境是1台master+2台node,我们选择node02做为边缘节点,给他打上边缘节点的标签,这样部署的ingress-controallpod会只跑在node02这个节点上。(如果是生产环境,可以选择2台node作为边缘节点,为了避免单点故障,可使用keepalive提高高可用)

#给node02节点打上边缘节点的标签 kubectl label nodes node02 edgenode=true #查看各节点的标签 kubectl get node --show-labels

拉取helm源:

#添加helm源 helm repo add ingress-nginx kubernetes.github.io/ingress-nginx #更新源 helm repo update #拉取相关配置修改values.yaml helm pull ingress-nginx/ingress-nginx

修改values.yaml

commonLabels: {} controller: name: controller image: registry: k8s.gcr.io #如果怕墙此处可换为阿里镜像源 image: ingress-nginx/controller tag: "v1.1.1" digest: sha256:0bc88eb15f9e7f84e8e56c14fa5735aaa488b840983f87bd79b1054190e660de pullPolicy: IfNotPresent runAsUser: 101 allowPrivilegeEscalation: true existingPsp: "" containerName: controller containerPort: nginx-test.wdyxgames.com访问成功,nginx-test1.wdyxgames.com因为没有在ingress中定义返回的是defaultbakend中的nginx返回的页面

ingress-nginx配置使用证书支持https
  1. 首先把证书导入到k8ssecret中去:

    kubectl create secret tls wdyxgames-tls --key _.wdyxgames.com.key --cert _.wdyxgames.com.crt -n nginx-test

  2. 再创建个ingress资源文件指定使用https

    #test-nginx-ingress-https.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: "nginx" name: example spec: rules: # 一个ingress可以配置多个rules - host: nginx-test.wdyxgames.com # 域名配置,可以不写,匹配*,此域名就是浏览器里访问的URL http: paths: # 相当于nginx的location,同一个host可以配置多个path,此处我们写所有 - backend: service: name: nginx-test-service # 代理到哪个svc,与上面创建的测试后端svc对应 port: number: 80 # svc暴露出来的端口,与上面创建的测试后端svc对应 path: / pathType: Prefix tls: - hosts: - nginx-test.wdyxgames.com secretName: wdyxgames-tls

    对比上面,只是添加了tls处的内容:

    #使用命令创建 kubectl apply -f test-nginx-ingress-https.yaml -n nginx-test ##### Error from server (BadRequest): error when creating "test-nginx-ingress-https.yaml": admission webhook "validate.nginx.ingress.kubernetes.io" denied the request: host "nginx-test.wdyxgames.com" and path "/" is already defined in ingress nginx-test/example #会有报错,是因为的http的ingress已经创建对应的转发关系,不可再创建 #删掉之前http的ingress,再创建 kubectl delete -f test-nginx-ingress.yaml -n nginx-test

  3. 使用浏览器访问,可见已经支持https访问了:

如何正确安装并配置ingress?