OpenShift

OpenShift上 部署Springboot微服务 Tips

微服务部署


1.SpringBoot 微服务工程做成(过程略),可以参照http://123.57.164.21/?p=4053

  • 这里把微服务和网关都打到一个工程里面,mircoservice是微服务,SringCloud是网关。
  • ※注意修改工程Pom文件中的modules,把微服务模块添加进去。

2.微服务目录结构如下。

微服务的目录结构,用到了mybatis

注意mybatis Mapper.xml 文件,数据库有schema时的写法。

3.SpringBoot最重要的配置文件(application.yml)

  • 微服务的配置文件[application.yml]
app.postgres-server: localhost
server.port: 8001
spring.application.name: abc

logging:
  file.path: logs
  level:
    com.ibm.xxxcloud: debug
mybatis:
  configuration:
    map-underscore-to-camel-case: true
  mapper-locations: classpath:mapper/**/*.xml
pagehelper:
  helper-dialect: postgresql
  params: countSql
  reasonable: true
  support-methods-arguments: true

# 本地数据库连接的配置
spring:
  datasource:
    driver-class-name: org.postgresql.Driver
    password: 1qazxsw2
    url: jdbc:postgresql://${app.postgres-server}:5432/abc_db
    username: postgres
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB

#---
#spring.config.activate.on-profile: docker
#server.port: 80
#spring:
#  datasource:
#    url: jdbc:postgresql://postgres:5432/abc_db

---
# OpenShift上的数据库连接配置,需要在部署时设定Secret信息(spring.profiles.active,POSTGRES_PASSWORD, POSTGRES_DB, POSTGRES_USER)。
spring.config.activate.on-profile: openshift
server.port: 8080
spring:
  datasource:
    password: ${POSTGRES_PASSWORD}
     #非常重要!!!!,这里需要注意第二个postgresql是openshift pod 数据库节点的名称,在openshift中都是内网,可以通过节点名称内部连接。
    url: jdbc:postgresql://postgresql:5432/${POSTGRES_DB}
    username: ${POSTGRES_USER}
logging:
  file.path: logs
  level:
    com.ibm.xxxcloud.productapi.mapper: debug

4.网关的配置文件

  • application.yaml
spring.application.name: gateway
server.port: 8080

spring:
  cloud:
    gateway:
      default-filters:
        - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedOrigins: "*"
            allowedMethods: "*"
            allowedHeaders: "*"
        add-to-simple-url-handler-mapping: true
      #本地环境的路由
      routes:
        - id: abc-api
          uri: http://localhost:8001
          predicates:
            - Path=/abc/**
          filters:
            - RewritePath=/abc/(?<path>.*), /$\{path}
logging:
  level:
    org.springframework.cloud.gateway: debug

springdoc:
  api-docs:
    enabled: true
  version: 1.0.0
  
#---
#spring.config.activate.on-profile: docker
#
#spring:
#  cloud:
#    gateway:
#      routes:
#        - id: abc-api
#          uri: http://abc:8080
#          predicates:
#            - Path=/abc/**
#          filters:
#            - RewritePath=/abc/(?<path>.*), /$\{path}
---



spring.config.activate.on-profile: openshift

spring:
  cloud:
    gateway:
      #openshift环境的路由
      routes:
        - id: abc-api
          #非常重要!!!!,这里需要注意abc是openshift pod 微服务节点的名称,在openshift中都是内网,可以通过节点名称内部连接。
          uri: http://abc:8080
          predicates:
            - Path=/abc/**
          filters:
            - RewritePath=/abc/(?<path>.*), /$\{path}

  • pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.ibm</groupId>
    <artifactId>abccloud</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>
    <properties>
        <java.version>11</java.version>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.source>11</maven.compiler.source>

    </properties>

    <modules>
        <module>spring-cloud/gateway</module>
        <module>microservices/abc-api</module>
    </modules>

</project>
  • 5.OpenShift控制台的配置

注意下面Context Dir要填微服务文件夹的路径

注意名称修改

注意不要创建公共的路由,点击部署

设置好环境变量

注意查看微服务是否启动成功,特别是端口号,注意端口号是不是8080,因为按咱们的设置来说,应该是8080启动。

GateWay部署

过程大体跟微服务相同,下面是需要注意的地方

Context dir输入GateWay的文件夹路径

通过TLS Termination启用Https,有三种类型:edge、passthrough、reencrypt

  • edge 访问route使用https协议,route到内部网络为非加密的,如未配置证书则使用默认证书。
  • reencrypt 全部访问路径均是加密的
  • passthrough 加密通信直接发送到目标,route不需提供TLS Termination。
配置LogDNA服务

1.打开 cluster 页面,向下滚动找到 Integrations > Logging, 点击 Connect

2.可以选择一个现有的 IBM Log Analysis 实例,如果没有则创建一个新的 Instance, (Lite Plan 可以免费使用 1 个月)

3. 使用 IBM Log Analysis

  • Instance 创建成功后, 点击 Cluster 页面 Integrations Logging 下的 Launch 按钮打开 IBM Log Analysis 控制台.
  • 在 Apps 下拉菜单中可以看到集群内所有 app,如下图所示,我们可以通过输入 app 的名字,比如product定位到我们的微服务:
  • 此处我们勾选 product-compositeproduct这两个 app,点击 Apply 按钮
  • 我们可以将当前的视图保存起来, 如下图所示,我保存了一个名为 jrecloud 的视图,用来查看与 jrecloud 相关的 app 日志。