1.内部服务之间如何相互访问?

为了解决集群内Pod相互访问,我们需要引入一个反向代理服务。
在这里插入图片描述

2.传统内部反向代理

在这里插入图片描述
在传统的数据中心,除了在网络边界部署反向代理,其实在内部也可以部署反向代理服务,来实现内部服务之间的反向路由与负载均衡调用,内部服务发现的做法有很多,除了部署负载均衡之外,还可部署服务注册中心+客户端配合的方式,例如Eureka+Ribbon

3.K8s内部反向代理

在K8S集群内部,服务之间互联也可以走Service代理,不过type采用ClusterIP,k8s会自动分配一个ClusterIP,有了这个IP之后,集群内部的Pod就可以通过这个IP,来访问目标服务,同时内部的Service同样具备屏蔽后端Pod ip的变化及负载均衡机制,其实在不通场景下部署Cluserip时也会发生变化,为了保证Cluster ip的变化,在k8s集群内部调用一般采用服务名称,运行时,k8s内部域名解析机制,会解析出服务名称对应的Cluster ip,本次Petclinic项目可对接嵌入式数据库,也可对接独立的数据库MySQL
在这里插入图片描述

4.编写Mysql Pod

[root@k8s7-200.host.com /data/k8s-yaml/k8s-msa-in-action/ch05/08]# cat mysql-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  containers:
    - name: mysql
      image: harbor.od.com/bobo/mysql:5.7.30
      env:
        - name: MYSQL_ROOT_PASSWORD
          value: petclinic
        - name: MYSQL_DATABASE
          value: petclinic

一般在生产环境中将一些敏感信息存储在ConfigMap或者Secret,当然,MySQL一般也不会交付到我们的K8S环境中,会使用独立的数据库集群服务。

5.编写Mysql Service

[root@k8s7-200.host.com /data/k8s-yaml/k8s-msa-in-action/ch05/08]# cat mysql-svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  selector:
    app: mysql
  ports:
    - name: tcp
      port: 3306
      targetPort: 3306
  type: ClusterIP

6.编写PetClinic Deployment

spring-petclinic-mono项目源码:https://github.com/chengyinwu-hash/spring-petclinic-mono

[root@k8s7-200.host.com /data/k8s-yaml/k8s-msa-in-action/ch05/08]# cat petclinic-dp.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: petclinic
spec:
  selector:
    matchLabels:
      app: petclinic
  replicas: 1
  template:
    metadata:
      labels:
        app: petclinic
    spec:
      containers:
        - name: petclinic
          image: harbor.od.com/bobo/spring-petclinic:1.0.1.RELEASE
          env:
            - name: SPRING_PROFILES_ACTIVE
              value: mysql
            - name: DATASOURCE_URL
              value: jdbc:mysql://mysql/petclinic
            - name: DATASOURCE_USERNAME
              value: root
            - name: DATASOURCE_PASSWORD
              value: petclinic
            - name: DATASOURCE_INIT_MODE
              value: always

7.编写PetClinic Service

在这里插入图片描述

8.应用资源配置清单

运行mysql pod和service
[root@k8s7-22.host.com ~]# kubectl apply -f http://k8s-yaml.od.com/k8s-msa-in-action/ch05/08/mysql-pod.yaml
pod/mysql created
[root@k8s7-22.host.com ~]# kubectl apply -f http://k8s-yaml.od.com/k8s-msa-in-action/ch05/08/mysql-svc.yaml
service/mysql created

运行petclinic deployment和service
[root@k8s7-22.host.com ~]# kubectl apply -f http://k8s-yaml.od.com/k8s-msa-in-action/ch05/08/petclinic-dp.yaml
deployment.apps/petclinic created
[root@k8s7-22.host.com ~]# kubectl apply -f http://k8s-yaml.od.com/k8s-msa-in-action/ch05/08/petclinic-svc.yaml
service/petclinic created

9.校验PetClinic应用正常启动

在这里插入图片描述

10.校验PetClinic应用

在这里插入图片描述
在这里插入图片描述

11.总结

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐