(六)Helm安装nginx-ingress

一、nginx-ingress

nginx-ingress是k8s入口,负责将客户端请求路由到k8s内部微服务上。如果说k8s是一个监狱,那么nginx-ingress就是监狱大门。

二、下载nginx-ingress

选择阿里云的helm chart仓库
image
下载nginx-chart

Helm pull stable/nginx-ingress

三、配置nginx-ingress

修改values.yaml
[1] hostNetwork: false改为true
[2] type: LoadBalancer改为NodePort
[3] rbac:
               create: false改为true

四、安装nginx-ingress

## 第一个nginx-ingress是release名。第二个nginx-ingress是chart解压目录
helm install nginx-ingress nginx-ingress

4.1 修改deployment version

Error: unable to build kubernetes objects from release manifest: unable to recognize "": no matches for kind "Deployment" in version "extensions/v1beta1"
如果有如上报错,需要修改nginx-ingress depolyment文件的apiVersion
grep -irl "extensions/v1beta1" nginx-ingress | grep deploy | xargs sed -i 's#extensions/v1beta1#apps/v1#g'

4.2 添加deployment selector

Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec
如果有如上错误,需要在deployment文件添加selector:
vi nginx-ingress/templates/controller-deployment.yaml

image
vi nginx-ingress/templates/default-backend-deployment.yaml
image
修改后再次执行,安装成功:
image

五、nginx-ingress组成

kubectl get pods -n nginx-ingress

image
由上图可知,nginx-ingress 包括 2 个组件:

    1)nginx-ingress-controller:nginx-ingress 控制器,负责 nginx-ingress pod 的生命周期管理。nginx-ingress pod 本质就是 nginx。用来处理请求路由等功能。这也是为什么称 nginx-ingress pod 是集群流量入口的缘故。

    2)nginx-ingress-default-backend:默认后端。如果你没有配置路由或路由配错了,将会由此 pod 兜底,一般会显示 404 给你。

六、创建tomcat微服务

nginx-ingress已经创建完毕,相当于nginx已经就绪。下面我们在k8s集群中创建一个名为 myweb-svc 的 tomcat 服务。

## 启动并暴露 tomcat 服务
kubectl run myweb --image=tomcat
kubectl expose deployment myweb --port=8080 --name=myweb-svc

七、创建ingress

刚创建完 nginx-ingress,现在又创建 ingress。是不是会有点迷,到底两者的区别是什么?你可以这么来理解,nginx-ingress 是 nginx,而 ingress 则相当于 nginx 里面的一段配置信息。例如下面的 ingress 文件,就是创建从 nginx 路由到 tomcat 的配置。
ingress 文件如下:

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

 name: server-jiuxi-ingress

 annotations:

   kubernetes.io/ingress.class: "nginx"

spec:

 rules:

 - host: zcy.jiuxi.org

   http:

     paths: /

     - path:

       backend:

         serviceName: myweb-svc

         servicePort: 8080
翻译成 nginx 的配置就是:
server {
    server_name zcy.jiuxi.org
    location / {
        proxy_pass http://myweb-svc:8080
    }
}

执行下列语句创建 ingress,生成 nginx 到 tomcat 的路由规则:

kubectl apply -f server-jiuxi-ingress.yaml

image

八、访问tomcat

上面创建了 nginx-ingress(nginx)、又创建了 tomcat 微服务、又生成了从 nginx 路由到 tomcat 的规则(ingress)。那么下一步我们就可以通过设置好的 ingress 来访问 tomcat 微服务了。但是访问前,还需要再做2点配置。

8.1 配置hosts

因为 ingress 中设置了域名 zcy.jiuxi.org,所以需要在浏览器所在的机器上设置 dns。我的IP是10.110.101.98。个人根据实际情况修改。

## windows 用户。编辑 C:\Windows\System32\drivers\etc\hosts 文件
## linux   用户。编辑 /etc/hosts 文件

image

8.2 确定nginx-ingress的服务端口

kubectl get svc

image

浏览器中输入 http://zcy.jiuxi.com:30742。

image

posted @ 2022-05-25 11:58  比特边界  阅读(1396)  评论(0编辑  收藏  举报