k8s部署-21-ingress-nginx实现原理和部署,并简单使用

网友投稿 282 2022-09-12

k8s部署-21-ingress-nginx实现原理和部署,并简单使用

​​什么是ingress​​

Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由。流量路由由 Ingress 资源上定义的规则控制。下面是一个将所有流量都发送到同一 Service 的简单 Ingress 示例:

Ingress 可为 Service 提供外部可访问的 URL、负载均衡流量、终止 SSL/TLS,以及基于名称的虚拟托管。Ingress 控制器通常负责通过负载均衡器来实现 Ingress,尽管它也可以配置边缘路由器或其他前端来帮助处理流量。

Ingress 不会公开任意端口或协议。将 HTTP 和 HTTPS 以外的服务公开到 Internet 时,通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的 Service。

​​下载配置文件​​

# 创建一个存放ingress-nginx配置文件的目录[root@node1 ~]# mkdir ingress-nginx[root@node1 ~]# cd ingress-nginx/[root@node1 ingress-nginx]#

# 查看命名空间[root@node1 ingress-nginx]# grep namespace mandatory.yaml -m 1 namespace: ingress-nginx[root@node1 ingress-nginx]# # 查看镜像,可以看到都是国内的地址,所以这次就不用翻墙了[root@node1 ingress-nginx]# grep image mandatory.yaml # Any image is permissible as long as: image: mirrorgooglecontainers/defaultbackend-amd64:1.5 image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.20.0[root@node1 ingress-nginx]# # 执行该文件[root@node1 ingress-nginx]# kubectl apply -f mandatory.yaml

​​查看创建结果​​

等到pod的状态是running的时候,说明创建成功了;

[root@node1 ingress-nginx]# kubectl get all -n ingress-nginxNAME READY STATUS RESTARTS AGEpod/default- 1/1 Running 0 23sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/default- ClusterIP 10.233.29.22 80/TCP 23sNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGEdaemonset.apps/nginx-ingress-controller 0 0 0 0 0 custom/ingress-controller-ready=true 23sNAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/default- 1/1 1 1 23sNAME DESIRED CURRENT READY AGEreplicaset.apps/default- 1 1 1 23s[root@node1 ingress-nginx]#

如果pod的状态异常,我们可以使用如下命令来查看具体原因:

[root@node1 yunweijia]# kubectl -n ingress-nginx describe pod default-主要观察 Events内容

​​暴露一个端口出来访问​​

1、node打标签,在这里我们使用node2,也就是192.168.112.131服务器来测试,首先操作如下:

# 查看node节点名称[root@node1 ingress-nginx]# kubectl get nodeNAME STATUS ROLES AGE VERSIONnode2 Ready 7d v1.20.2node3 Ready 7d v1.20.2[root@node1 ingress-nginx]## 将node2节点打上一个ingress标签[root@node1 ingress-nginx]# kubectl label node node2 app=ingressnode/node2 labeled[root@node1 ingress-nginx]#

2、修改配置文件;

# 修改的就是我们上面下载的那个文件[root@node1 ingress-nginx]# vim mandatory.yaml# 找到272行,进行修改如下:272 spec:273 serviceAccountName: nginx-ingress-serviceaccount274 hostNetwork: true275 nodeSelector:276 #custom/ingress-controller-ready: "true"277 app: ingress278 containers:279 - name: nginx-ingress-controller280 image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.20.0281 args:# 主要是 app: ingress进行了修改,并注释了原内容

3、重新执行让其生效并检测;

[root@node1 ingress-nginx]# kubectl apply -f mandatory.yaml# 稍等两分钟,会出现两个pod,并且为running的时候,就表示生效了[root@node1 ingress-nginx]# kubectl get pod -n ingress-nginxNAME READY STATUS RESTARTS AGEdefault- 1/1 Running 0 50mnginx-ingress-controller-qsgfk 1/1 Running 0 40m[root@node1 ingress-nginx]#

切换到node2节点上,验证端口号:

[root@node2 ~]# netstat -tunlp | grep 80tcp 0 0 0.0.0.0:18080 0.0.0.0:* LISTEN 44694/nginx: master tcp 0 0 192.168.112.131:2380 0.0.0.0:* LISTEN 771/etcd tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 44694/nginx: master tcp6 0 0 :::18080 :::* LISTEN 44694/nginx: master tcp6 0 0 :::80 :::* LISTEN 44694/nginx: master [root@node2 ~]# netstat -tunlp | grep 443tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 44694/nginx: master tcp6 0 0 :::6443 :::* LISTEN 729/kube-apiserver tcp6 0 0 :::443 :::* LISTEN 44694/nginx: master [root@node2 ~]#

4、新建一个demo来测试,在这里我们使用tomcat来测试,文件内容如下;

[root@node1 ingress-nginx]# vim ingress-demo.yaml#deployapiVersion: apps/v1kind: Deploymentmetadata: name: tomcat-demospec: selector: matchLabels: app: tomcat-demo replicas: 1 template: metadata: labels: app: tomcat-demo spec: containers: - name: tomcat-demo image: registry.cn-hangzhou.aliyuncs.com/liuyi01/tomcat:8.0.51-alpine ports: - containerPort: 8080---#serviceapiVersion: v1kind: Servicemetadata: name: tomcat-demospec: ports: - port: 80 protocol: TCP targetPort: 8080 selector: app: tomcat-demo---#ingressapiVersion: extensions/v1beta1kind: Ingressmetadata: name: tomcat-demospec: rules: - host: tomcat.yunweijia.com paths: - path: / backend: serviceName: tomcat-demo servicePort: 80[root@node1 ingress-nginx]#

5、创建该pod;

[root@node1 ingress-nginx]# kubectl create -f ingress-demo.yaml

PS:此处稍等3分钟,进行如下检测,确保为running状态。

[root@node1 ingress-nginx]# kubectl get pod | grep tomcat-demotomcat-demo-54cbbcffdb-x8qck 1/1 Running 0 27m[root@node1 ingress-nginx]#

6、修改本机(windows上的,就是你的客户端)hosts文件,文件最后面新增如下两行内容:

192.168.112.131 api.yunweijia.com192.168.112.131 tomcat.yunweijia.com

7、浏览器访问

http://api.yunweijia.com

返回状态如下:

为什么返回这个呢,这是因为我们运行的demo中没有定义该名字,所以k8s默认返回了一个backend,就是404,这是正常流程。

http://tomcat.yunweijia.com

返回状态如下:

至此,本文结束。发现从开始到现在,一直没有说过k8s的yaml文件如何编写,格式怎样,下一篇我们就主要介绍该内容。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:江苏沭阳花木电商售假调查:绿化草P成进口花卖,假玫瑰月销万单!
下一篇:k8s部署-22-yaml文件怎么写,规则是什么,在k8s中分别有什么含义
相关文章

 发表评论

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