一、前端服务部署到k8s

1、定义Deployment类型的yaml文件

# 创建ns
[root@k8s-master01 ~]# k create ns demo
[root@k8s-master01 ~]# mkdir springcloud

# 定义yaml文件
[root@k8s-master01 ~]# cd springcloud
[root@k8s-master01 springcloud]# vim demo-ui-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-ui
  namespace: demo
  labels:
    app: demo-ui
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo-ui
  template:
    metadata:
      labels:
        app: demo-ui
    spec:
      containers:
      - name: demo-ui
        image: registry.cn-hangzhou.aliyuncs.com/abroad_images/demo-ui:v0.0.1
        imagePullPolicy: IfNotPresent
        ports:
        - name: http-web
          containerPort: 80
          protocol: TCP
        resources:
          limits:
            cpu: "1"
            memory: "1Gi"
          requests:
            cpu: "100m"
            memory: "128Mi"
        readinessProbe:
          httpGet:
            path: /  
            port: 80
          initialDelaySeconds: 10
          timeoutSeconds: 2
          periodSeconds: 5
        livenessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 10
          timeoutSeconds: 2
          periodSeconds: 5
      restartPolicy: Always

2、定义Service类型的yaml文件

[root@k8s-master01 ~]# cd springcloud
[root@k8s-master01 springcloud]# vim demo-ui-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: demo-ui
  namespace: demo
  labels:
    app: demo-ui
spec:
  type: ClusterIP
  ports:
  - name: http-web  
    port: 80
    targetPort: http-web
    protocol: TCP
  selector:
    app: demo-ui

3、创建Ingress文件

[root@k8s-master01 ~]# cd springcloud
[root@k8s-master01 springcloud]# vim demo-ui-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-ui
  namespace: demo
spec:
  ingressClassName: nginx  
  rules:
  - host: demo.test.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: demo-ui
            port:
              number: 80

4、创建前端服务

[root@k8s-master01 springcloud]# k apply -f demo-ui-deploy.yaml -f demo-ui-svc.yaml -f demo-ui-ingress.yaml 

# 验证pod
[root@k8s-master01 springcloud]# kgp -n demo | grep ui
demo-ui-5bddffc4f6-v2877        1/1     Running   0          25s

# 验证ingress
[root@k8s-master01 springcloud]# kg ingress -n demo
NAME           CLASS   HOSTS           ADDRESS     PORTS   AGE
demo-receive   nginx   demo.test.com   10.0.0.22   80      105m
demo-ui        nginx   demo.test.com               80      40s

# 查看服务
[root@k8s-master01 springcloud]# kg svc -n demo | grep demo-ui
demo-ui        ClusterIP   10.111.107.108   <none>        80/TCP           61s

5、浏览器上测试访问

在windows主机上添加hosts解析(C:\Windows\System32\drivers\etc\hosts)

10.0.0.22 demo.test.com

在浏览器上输入demo.test.com测试访问

image-20250323112607879

打开F12上查看请求头信息,

image-20250323112848072

其中访问流量走向为:

  • 1)用户访问demo.test.com/,调用demo.test.com/receiveapi/api/generatePassword接口通过路由到网关服务
  • 2)demo-receive通过demo-eureka查询服务列表,demo-eureka返回demo-handler地址给demo-receive
  • 3)demo-receive转发请求给demo-handler
  • 4)demo-handler返回随机密码给demo-receive
  • 5)demo-receive最终返回数据给浏览器