Kubernetes 内部应用间通信的反向代理
后台应用间通信的传统反向代理
后台应用间通信的K8S反向代理
实验文件
本实验要创建两个POD,两个服务。下面开始准备发布文件。
- mysql-pod.yml - pod有状态的应用,一般只部署一个pod。实际生产环境,对可用性可靠新要求高的服务,一般不部署在K8S环境当中,而是独立的使用数据库服务。
- mysql-service.yml
- petclinic-deployment.yml - pod无状态
- petclinic-service.yml
mysql-pod.yml内容如下:
apiVersion: v1
kind: Pod
metadata:
name: mysql
labels:
app: mysql
spec:
containers:
- name: mysql
#mysql官方5.7镜像
image: mysql:5.7
env:
#支持启动的时候配置数据库
- name: MYSQL_ROOT_PASSWORD
#root用户密码,实际生产环境要配置在ConfigMap/Secret中。
value: petclinic
- name: MYSQL_DATABASE
#创建数据库
value: petclinic
mysql-service.yml文件内容如下:
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
selector:
app: mysql
ports:
- name: tcp
port: 3306
targetPort: 3306
type: ClusterIP
petclinic-deployment.yml文件内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: petclinic
spec:
replicas: 1
selector:
matchLabels:
app: petclinic
template:
metadata:
labels:
app: petclinic
spec:
containers:
- name: petclinic
# Run this image
image: spring2go/spring-petclinic:1.0.0.RELEASE
env:
- name: SPRING_PROFILES_ACTIVE
value: mysql
- name: DATASOURCE_URL
# 直接使用服务名mysql,即://后面的mysql,后面为数据库名。
value: jdbc:mysql://mysql/petclinic
- name: DATASOURCE_USERNAME
value: root
- name: DATASOURCE_PASSWORD
value: petclinic
- name: DATASOURCE_INIT_MODE
value: always
petclinic-service.yml内容如下:
apiVersion: v1
kind: Service
metadata:
# Unique key of the Service instance
name: petclinic
spec:
ports:
# Accept traffic sent to port 80
- name: http
# port为集群内部服务前通信的端口
port: 8080
targetPort: 8080
nodePort: 31080
selector:
# 下面标签app: petclinic表示本服务会路由指向所有app标签为petclinic的pod。
app: petclinic
type: NodePort
发布命令
由于petclinic应用依赖mysql,所以应该先启动mysql。
kubectl get all
#如果本地没有mysql镜像,还需要下载镜像,时间会长点
kubectl apply -f mysql-pod.yml
kubectl apply -f mysql-service.yml
kubectl get all
kubectl apply -f petclinic-deployment.yml
kubectl apply -f petclinic-service.yml
kubectl get all
查看petclinic应用日志
校验petclinic应用是否正常启动。
kubectl get all
#复制petclinic Pod Name
kubectl logs pod_name
#查看日志
浏览器校验 http://localhost:31080