k8s部署-42-带你深入学习ingress-nginx(上)

网友投稿 1016 2022-11-04

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

k8s部署-42-带你深入学习ingress-nginx(上)

1ingress-nginx部署方式

我们最开始部署的时候,采用的就是daemonset的方式,这里倒是不需要改变了,如果你是从官网,或者其他地方安装的,这里可以修改成daemonset的方式,那么我们如何给每个节点都部署上去呢?先看下现在的状态;

[root@node1 ~]# kubectl get all -n ingress-nginxNAME READY STATUS RESTARTS AGEpod/default-http-backend-86dcdf4845-gfwn8 1/1 Running 3 2d22hpod/nginx-ingress-controller-7k66x 1/1 Running 0 36mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/default-http-backend ClusterIP 10.233.198.54 80/TCP 7d2hNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGEdaemonset.apps/nginx-ingress-controller 1 1 1 1 1 app=ingress 7d2hNAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/default-http-backend 1/1 1 1 7d2hNAME DESIRED CURRENT READY AGEreplicaset.apps/default-http-backend-86dcdf4845 1 1 1 7d2h[root@node1 ~]#

从上面可以看到,我们的nginx-ingress-controller就是daemonset方式,且只有一个节点,我们如何保证每个节点都安装上呢?

可以看到我们这个daemonset上打了一个标签,我们只需要在需要安装ingress-nginx的节点上配置标签,就可以了,我们验证下看看。

[root@node1 ~]# kubectl get node --show-labelsNAME STATUS ROLES AGE VERSION LABELSnode2 Ready 30d v1.20.2 app=ingress,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux,nihao=wohao,yunweijia=Truenode3 Ready 30d v1.20.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ceshi2=yunweijia,kubernetes.io/arch=amd64,kubernetes.io/hostname=node3,kubernetes.io/os=linux[root@node1 ~]#

从上面可以看到node2节点上有标签,app=ingress,所以这个daemonset会在node2上,那么我们给node3也配置个标签试试呢?

[root@node1 ~]# kubectl label node node3 app=ingressnode/node3 labeled[root@node1 ~]# kubectl get node node3 --show-labelsNAME STATUS ROLES AGE VERSION LABELSnode3 Ready 30d v1.20.2 app=ingress,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ceshi2=yunweijia,kubernetes.io/arch=amd64,kubernetes.io/hostname=node3,kubernetes.io/os=linux[root@node1 ~]#

这样子就给节点打上了一个app=ingress的标签,我们再看下ingree-nginx的daemonset变化;

[root@node1 ~]# kubectl get all -n ingress-nginxNAME READY STATUS RESTARTS AGEpod/default-http-backend-86dcdf4845-gfwn8 1/1 Running 3 2d22hpod/nginx-ingress-controller-7k66x 1/1 Running 0 54mpod/nginx-ingress-controller-bcjf8 1/1 Running 0 7m30sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/default-http-backend ClusterIP 10.233.198.54 80/TCP 7d2hNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGEdaemonset.apps/nginx-ingress-controller 2 2 2 2 2 app=ingress 7d2hNAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/default-http-backend 1/1 1 1 7d2hNAME DESIRED CURRENT READY AGEreplicaset.apps/default-http-backend-86dcdf4845 1 1 1 7d2h[root@node1 ~]#

看到数量变成了两个,这样子我们后续扩展就方便多了。

2配置4层代理

我们看下ingress-nginx自带的configmap文件;

[root@node1 ~]# kubectl get cm -n ingress-nginxNAME DATA AGEingress-controller-leader-nginx 0 7d2hkube-root-ca.crt 1 7d2hnginx-configuration 0 7d2htcp-services 0 7d2hudp-services 0 7d2h[root@node1 ~]#

我们来看下tcp-service的具体内容;

[root@node1 ~]# kubectl get cm -n ingress-nginx tcp-services -o yamlapiVersion: v1kind: ConfigMapmetadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"ingress-nginx","app.kubernetes.io/part-of":"ingress-nginx"},"name":"tcp-services","namespace":"ingress-nginx"}} creationTimestamp: "2022-04-12T11:50:34Z" labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:annotations: .: {} f:kubectl.kubernetes.io/last-applied-configuration: {} f:labels: .: {} f:app.kubernetes.io/name: {} f:app.kubernetes.io/part-of: {} manager: kubectl-client-side-apply operation: Update time: "2022-04-12T11:50:34Z" name: tcp-services namespace: ingress-nginx resourceVersion: "469519" uid: abea366f-9805-4672-81b3-af55a5c922c1[root@node1 ~]#

然后我们来手工配置一个tcp代理的yaml文件;

[root@node1 ~]# cd namespace/[root@node1 namespace]# mkdir ingress[root@node1 namespace]# cd ingress/[root@node1 ingress]# vim tcp-config.yaml apiVersion: v1kind: ConfigMapmetadata: name: tcp-services namespace: ingress-nginxdata: "30000": default/springboot-web-demo:80  # 意思是说将default命名空间下的springboot-web-demo这个服务的80端口  # 暴露出去,且端口号是30000[root@node1 ingress]# kubectl apply -f tcp-config.yaml configmap/tcp-services configured[root@node1 ingress]#

然后我们验证下;

[root@node1 ingress]# kubectl get pod -o wide | grep springboot-web-demospringboot-web-demo-5c9446ffbf-9f5dj 1/1 Running 0 113s 10.200.104.58 node2 [root@node1 ingress]#

可以看到这个pod运行在了node2节点上,我们去看看;

[root@node2 ~]# netstat -tunlp | grep 30000tcp 0 0 0.0.0.0:30000 0.0.0.0:* LISTEN 2864/nginx: master tcp6 0 0 :::30000 :::* LISTEN 2864/nginx: master [root@node2 ~]#

可以看到node2节点确实有30000端口号启动了哈,浏览器访问验证一下呢?

http://springboot.yunweijia.com:30000/hello?name=yunweijia

验证成功了,那么我们有两个ingress-nginx,另一个node3节点不会也暴露了30000端口吧,我们去看看;

[root@node3 ~]# netstat -tunlp | grep 30000tcp 0 0 0.0.0.0:30000 0.0.0.0:* LISTEN 43529/nginx: master tcp6 0 0 :::30000 :::* LISTEN 43529/nginx: master [root@node3 ~]#

果然它也暴露了一个30000端口,那么我们分别通过node2和node3本身的IP和端口号,访问试试呢?

http://192.168.112.131:30000/hello?name=yunweijiahttp://192.168.112.132:30000/hello?name=yunweijia

验证完毕,两个都可以访问到。

至此,本文结束,下一篇咱们继续进行ingress-nginx的深入学习哈。

上一篇:软件测试培训之功能测试与性能测试的区别
下一篇:软件测试培训之性能测试模型
相关文章

 发表评论

暂时没有评论,来抢沙发吧~