本地搭建K8s环境,并配置Ingress代理

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了本地搭建K8s环境,并配置Ingress代理相关的知识,希望对你有一定的参考价值。

书接上文,上回说到了在Linux系统搭建K8s环境,通过脚本一键处理,具体可参考《入门K8s:一键脚本搭建Linux服务器集群》。

虽然Linux系统很不错,而且也推荐都买一个做练习,但是不可避免的会遇到一些小问题,比如:

1、开发阶段,频繁生成镜像,用来测试;

2、局域网内多台电脑快速实现集群操作;

3、暂时不想买服务器;

那我们就在本地Windows系统中,快速的部署一个K8s集群,用来短时间的看到效果和测试用例,还是方便很多的,不过如果想要好好研究的话,还是要搞一个Linux服务器,从头慢慢的搭建吧。

PS:如果想要在本地搭建环境,只有一个要求,电脑内存尽量在18G以上,我的电脑是32G。

Part 1

安装Docker Desktop

如果你之前安装过,现在K8s不能用了,或者之前本地都没有安装过,那可以从官网下载,然后直接安装即可,过程很简单,一直Next就行。

有一点需要注意就是要看好对应的版本,因为后边涉及到版本的问题。

https://www.docker.com/products/docker-desktop

安装完成,双击图标,打开桌面程序,就可以看到左下角有一个绿色的鲸鱼标识,注意,这个时候只有一个:

中间的打马赛克的默认也是没有的,这是我已经安装好的。

安装好Docker服务以后,K8s默认是关闭状态的,需要我们手动打开:

请注意!

这个时候不要轻易的打开它,除非你有VPN,且网速比较好。

因为开启K8s,主要是启动对应的服务,大概有七八个服务,镜像是很麻烦的,特别是没有配置本地加速的情况下(加速可以用阿里云或者中科大的地址,百度即可)。所以需要从远程仓库把镜像拉下来,过程很慢,即便我用VPN了,也一个小时未成功,无奈只能重装,换了第二种方案。

Part 2

安装K8s服务

上边直接手动启动的方式已经放弃,换成了阿里的本地镜像:
https://github.com/AliyunContainerService/k8s-for-docker-desktop

直接clone代码,切换到当前Docker Desktop对应版本的分支,然后根据他们的README操作即可,比较简单,镜像拉取完成后,就可以看到多了一些镜像:

请好好对照下镜像,如果少了,就手动拉取,不然是启动不了K8s的,这里有一个坑,阿里仓库给的ingress的版本比较低,是0.26.1的,这个版本有bug,建议用官方最新的1.0版本:

相应的v1.0版本的ingress的yml文件可以直接从官方GitHub中找到:

https://github.com/kubernetes/ingress-nginx/blob/main/deploy/static/provider/cloud/deploy.yaml

只要保证上边的镜像都有了,就可以开启K8s了

过程可能会持续1~3分钟,但是肯定不会很长,要是时间超过20分钟,那就只能重新搞了。

假设你已经弄好了,K8s也启动了,如何查看效果呢,比如节点信息,Pod信息,service信息等,平时使用最多的就是开启admin看板,查看所有的信息,不过操作不便,还需要登录,这里安利一个工具,比admin更方便——Lens。

Part 3

用Lens连接集群

去Lens官网下载并安装:

https://github.com/lensapp/lens

安装完成后,配置上下文,开启连接:

过程很简单,功能很丰富。

安装完成软件,来一个完整的前端的ingress部署吧。

Part 4

部署一个完整的VUE项目

过程其实很简单,就是准备好一个镜像,然后部署deployment、pod、service、ingress,直接来yml吧,有问题一起讨论:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: blog-h5
  namespace: default
  labels:
    app: blog-h5
spec:
  replicas: 1
  selector:
    matchLabels:
      app: blog-h5    # has to match .spec.template.metadata.labels
  template:
    metadata:
      labels:
        app: blog-h5 # has to match .spec.selector.matchLabels
    spec:
      containers:
        - name: blog-h5
          image: blog.core
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
              name: blog-h5


---
apiVersion: v1
kind: Service
metadata:
  name: blog-h5
  namespace: default
  labels:
    app: blog-h5
spec:
  ports:
    - port: 80
      targetPort: 80
      name: blog-h5
  selector:
    app: blog-h5


---
#ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: blog-h5-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    - host: h5.cxt.ycsure.com
      http:
        paths:
          - backend:
              service:
                name: blog-h5
                port:
                  number: 80
            path: /
            pathType: Prefix

以上是关于本地搭建K8s环境,并配置Ingress代理的主要内容,如果未能解决你的问题,请参考以下文章

k8s学习-CKA真题-七层负载均衡Ingress

k8s ingress实现http/https7层和tcp四层代理

Kubernetes用nginx反向代理另外服务

K8S(Rancher)Ingress 规则 - Nginx 反向代理重定向

K8S搭建-1 Master 2 Workers(dashboard+ingress)

kubernetes k8s nginx ingress 多层代理后的诡异问题