美文网首页linux运维
k8s部署-21-ingress-nginx实现原理和部署,并简

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

作者: 运维家 | 来源:发表于2022-03-28 09:19 被阅读0次

    上文我们讲通信方式的时候,最后集群外访问集群内的时候,涉及到了ingress,那么本文我们就详细的来了解下ingress。Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP。Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟托管。

    什么是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]# 

    从公众号后台回复“ingress-nginx配置文件”,即可获取该文件。该文件中的配置就不多看了,主要可以看下新建了一个命名空间为“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-http-backend-86dcdf4845-lkpkz   1/1     Running   0          23sNAME                           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGEservice/default-http-backend   ClusterIP   10.233.29.22   <none>        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-http-backend   1/1     1            1           23sNAME                                              DESIRED   CURRENT   READY   AGEreplicaset.apps/default-http-backend-86dcdf4845   1         1         1       23s[root@node1 ingress-nginx]#

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

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

    暴露一个端口出来访问

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

    # 查看node节点名称[root@node1 ingress-nginx]# kubectl get nodeNAME    STATUS   ROLES    AGE   VERSIONnode2   Ready    <none>   7d    v1.20.2node3   Ready    <none>   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-http-backend-86dcdf4845-lkpkz   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    http:      paths:      - path: /        backend:          serviceName: tomcat-demo          servicePort: 80[root@node1 ingress-nginx]#

    5、创建该pod;

    剩余内容请转至VX公众号 “运维家” ,回复 “128” 查看。

    相关文章

      网友评论

        本文标题:k8s部署-21-ingress-nginx实现原理和部署,并简

        本文链接:https://www.haomeiwen.com/subject/yjzujrtx.html