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"}