Kubernetes(K8S) + Harbor + Ingress 部署 SpringBoot + Vue 前后端分离项目-部署项目

注意:在项目部署之前,先要保证K8S每一台服务器(服务器1,2,3)的/etc/docker/daemon.json都配置上了 Harbor 的内网IP和端口号,否则会导致K8S集群无法成功拉取Harbor私有镜像:

{
  "registry-mirrors": [
          "https://8er86g8v.mirror.aliyuncs.com",
          "https://docker.1panel.live/"
  ],
  "insecure-registries": ["服务器4内网IP:9999"]
}

然后服务器1,2,3通过下述命令重新加载配置:

systemctl daemon-reload && systemctl restart docker

7.1、配置 NameSpace

命名空间namespace主要是用于 K8S 集群中资源隔离的,所以在这里我为项目创建一个命名空间prod-env,命令如下:

kubectl create ns prod-env

在这里插入图片描述

7.2、配置 Deployment、Service

具体配置内容如下,注释写的很清楚,不多解释啦!
前端部署配置 frontend.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  # Deployment 名称
  name: frontend-deployment
  # 命名空间
  namespace: prod-env
  labels:
    app: frontend-label
spec:
  # 生成 Pod 数量
  replicas: 3
  # Pod 标签选择器,用于匹配管理
  selector:
    matchLabels:
      app: frontend-label
  template:
    # Pod 标签,必须与 selector 匹配
    metadata:
      labels:
        app: frontend-label
    spec:
      containers:
        # 容器名
      - name: frontend
        # Harbor 前端镜像地址
        image: 服务器4内网IP:9999/test/frontend-project:1.0
        imagePullPolicy: Always
        # 容器端口
        ports:
        - containerPort: 80
        # 指定容器的资源请求和限制
        resources:
          requests:
            memory: 300Mi
            cpu: 200m
          limits:
            memory: 500Mi
            cpu: 400m
            
---

kind: Service
apiVersion: v1
metadata:
  name: frontend-service
  namespace: prod-env
  labels:
    app: frontend-label
spec:
  selector:
    app: frontend-label
  # Service 类型:ClusterIP、NodePort、LoadBalancer
  # 这里使用 ClusterIP,代表只在集群内部通讯(实际企业中也是用 ClusterIP)
  # NodePort可以将Service对外暴露访问(一般没人用)
  type: ClusterIP
  ports:
  - protocol: TCP
    # 容器端口
    port: 80
    # Service 端口
    targetPort: 80

后端部署配置 backend.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend-deployment
  namespace: prod-env
  labels:
    app: backend-label
spec:
  replicas: 3
  selector:
    matchLabels:
      app: backend-label
  template:
    metadata:
      labels:
        app: backend-label
    spec:
      containers:
      - name: backend
        image: 服务器4内网IP:9999/test/backend-project:1.0
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
        resources:
          requests:
            memory: 300Mi
            cpu: 200m
          limits:
            memory: 500Mi
            cpu: 400m
            
---

kind: Service
apiVersion: v1
metadata:
  name: backend-service
  namespace: prod-env
  labels:
    app: backend-label
spec:
  selector:
    app: backend-label
  type: ClusterIP
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080

最后,通过下述命令对前端、后端项目进行启动:

kubectl apply -f frontend.yaml && kubectl apply -f backend.yaml

在这里插入图片描述

7.3、配置 Ingress-Nginx

直接通过 K8S Service 的 NordPort 模式可以完成服务对外提供访问的要求,但是真正企业级场景来说,更多的是使用 Ingress-Nginx 构建应用入口,所以这里还需要部署一下 Ingress-Nginx,请参考下述连接部署:https://xuzhibin.blog.****.net/article/details/143227591

按照上述部署完毕后其实有个问题,我们需要保证ingress-nginx-controller部署在 Master 节点上,否则无法进行正确的访问,所以还需要修改Ingress部署配置文件的一处位置,让其部署在主节点上:
在这里插入图片描述
修改完毕后,重新卸载安装 Ingress-Nginx

# 删除 Ingress-Nginx
kubectl delete -f ingress-deploy.yaml

# 安装 Ingress-Nginx
kubectl apply -f ingress-deploy.yaml

此时可以看到,ingress-nginx-controller 部署在 k8s-master 上了:
在这里插入图片描述
部署完毕后,接下来要做的是配置一下 ingress-project.yaml 完成访问配置,由于我的服务器都在香港地区,所以这次我就用真实的域名解析到我的主服务器IP上(没有可用于名,就得通过修改 hosts 文件使用假域名测试了),配置内容如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  # Ingress-Nginx 名称
  name: my-ingress
  namespace: prod-env
spec:
  # Ingress Class
  ingressClassName: nginx
  # 路由规则
  rules:
  # 域名
  - host: k8s.joydevelop.com
    http:
      paths:
      # 访问域名根路径,就会路由到 front-service 服务上
      - path: /
        pathType: Prefix
        backend:
          service:
            # 前端服务名称
            name: frontend-service
            # 服务端口
            port:
              number: 80
              
#      后端服务 Service 就不用暴露了,不需要直接把后端接口给别人调用啊!          
#      - path: /api
#        pathType: Prefix
#        backend:
#          service: 
#            name: backend-service
#            port: 
#              number: 8080

然后通过下述命令进行 Ingress-Nginx 创建启动:

kubectl apply -f ingress-project.yaml

7.4、访问测试

最后,在浏览器上通过访问域名,可以看到 K8S 部署 SpringBoot + Vue.js 项目成功!
在这里插入图片描述
在这里插入图片描述

上一篇:红日安全-ATT& CK实战:Vulnstack靶场实战-内网实战


下一篇:IO--多线程(条件变量)- 代码实现: