1.5.3 网关服务部署到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-receive-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-receive
  namespace: demo
  labels:
    app: demo-receive
  annotations:
    app: demo-receive  
spec:
  replicas: 2
  selector:
    matchLabels:
      app: demo-receive
  template:
    metadata:
      labels:
        app: demo-receive
    spec:
      containers:
      - name: receive
        image: registry.cn-hangzhou.aliyuncs.com/abroad_images/demo-receive:v0.0.1
        imagePullPolicy: IfNotPresent 
        ports:
        - name: http-web
          containerPort: 8080
          protocol: TCP
        env:
          - name: SPRING_PROFILES_ACTIVE
            value: "k8s"
          - name: SERVER_PORT
            value: "8080"
          - name: EUREKA_SERVER_ADDRESS
            value: "http://demo-eureka-0.demo-eureka:8761/eureka/,http://demo-eureka-1.demo-eureka:8761/eureka/,http://demo-eureka-2.demo-eureka:8761/eureka/"
        resources:
          limits:
            cpu: "1"
            memory: "1Gi"  
          requests:
            cpu: "100m"
            memory: "128Mi"
        readinessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 30
          timeoutSeconds: 2
          periodSeconds: 5
        livenessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 30
          timeoutSeconds: 2
          periodSeconds: 5
        # 添加启动探针(可选,适用于启动慢的应用)
        startupProbe:
          tcpSocket:
            port: 8080
          failureThreshold: 30
          periodSeconds: 10
      restartPolicy: Always

2、定义Service类型的yaml文件

# 创建无头服务,用于给eureka节点添加标识 
[root@k8s-master01 ~]# cd springcloud
[root@k8s-master01 springcloud]# vim demo-receive-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: demo-receive
  namespace: demo
  labels:
    app: demo-receive
spec:
  type: ClusterIP  
  ports:
  - name: http-web
    port: 8080
    targetPort: 8080  
    protocol: TCP
  selector:
    app: demo-receive

3、创建Ingress文件

[root@k8s-master01 ~]# cd springcloud
[root@k8s-master01 springcloud]# vim demo-receive-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-receive
  namespace: demo
  labels:
    app: demo-receive
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  ingressClassName: nginx  
  rules:
  - host: demo.test.com
    http:
      paths:
      - path: /receiveapi(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: demo-receive
            port:
              number: 8080

4、创建网关服务

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

# 验证pod
[root@k8s-master01 springcloud]# kgp -n demo | grep receive
demo-receive-5b4c74d894-d6kwg   1/1     Running   0          4m41s
demo-receive-5b4c74d894-kwqz2   1/1     Running   0          4m41s

# 验证ingress
[root@k8s-master01 springcloud]# kg ingress -n demo
NAME           CLASS   HOSTS           ADDRESS   PORTS   AGE
demo-receive   nginx   demo.test.com             80      6m26s

# 查看服务
[root@k8s-master01 springcloud]# kg svc -n demo | grep demo-receive
demo-receive   ClusterIP   10.102.196.158   <none>        8080/TCP         4m11s

# 测试服务,因为有服务没有迁移完成,所以报500
[root@k8s-master01 springcloud]# curl 10.102.196.158:8080/api/generatePassword
{"timestamp":"2025-03-23T01:56:19.070+0000","status":500,"error":"Internal Server Error","message":"No instances available for handler","path":"/api/generatePassword"}