AIOps 平台的误解,挑战及建议(中),AIOps常见的误解
1016
2022-11-04
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
从上面可以看到,我们的nginx-ingress-controller就是daemonset方式,且只有一个节点,我们如何保证每个节点都安装上呢?
可以看到我们这个daemonset上打了一个标签,我们只需要在需要安装ingress-nginx的节点上配置标签,就可以了,我们验证下看看。
[root@node1 ~]# kubectl get node --show-labelsNAME STATUS ROLES AGE VERSION LABELSnode2 Ready
从上面可以看到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
这样子就给节点打上了一个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
看到数量变成了两个,这样子我们后续扩展就方便多了。
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
可以看到这个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的深入学习哈。
发表评论
暂时没有评论,来抢沙发吧~