如何正确安装并配置ingress?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1049个文字,预计阅读时间需要5分钟。
说明:
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,其中
30076是kubectl get svc -n ingress-nginx的svc暴露出来的nodeport端口。
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-nginxnginx-ingress-controall官网:kubernetes.github.io/ingress-nginx/
现有的测试环境是1台
master+2台node,我们选择node02做为边缘节点,给他打上边缘节点的标签,这样部署的ingress-controall的pod会只跑在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:ingress-nginx配置使用证书支持https
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返回的页面
首先把证书导入到
k8s的secret中去:
kubectl create secret tls wdyxgames-tls --key _.wdyxgames.com.key --cert _.wdyxgames.com.crt -n nginx-test再创建个
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使用浏览器访问,可见已经支持
https访问了:
本文共计1049个文字,预计阅读时间需要5分钟。
说明:
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,其中
30076是kubectl get svc -n ingress-nginx的svc暴露出来的nodeport端口。
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-nginxnginx-ingress-controall官网:kubernetes.github.io/ingress-nginx/
现有的测试环境是1台
master+2台node,我们选择node02做为边缘节点,给他打上边缘节点的标签,这样部署的ingress-controall的pod会只跑在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:ingress-nginx配置使用证书支持https
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返回的页面
首先把证书导入到
k8s的secret中去:
kubectl create secret tls wdyxgames-tls --key _.wdyxgames.com.key --cert _.wdyxgames.com.crt -n nginx-test再创建个
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使用浏览器访问,可见已经支持
https访问了:

