spring cloud kubernetes集群开启https/http2

介绍

springcloud版本:2021.0.2
官网介绍:https://docs.spring.io/spring-cloud-kubernetes/docs/2.1.1/reference/html/#loadbalancer-for-kubernetes

添加依赖

implementation("org.springframework.cloud:spring-cloud-starter-kubernetes-client-loadbalancer")

以下是完整依赖:

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-actuator")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.cloud:spring-cloud-starter-kubernetes-client-all")
    implementation("org.springframework.cloud:spring-cloud-starter-openfeign")
    implementation("org.springframework.cloud:spring-cloud-starter-kubernetes-client-loadbalancer")
    implementation("io.github.openfeign:feign-httpclient")
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation("org.springframework.boot:spring-boot-starter-test")
}

说明:
spring-boot-starter-actuator:健康监控
spring-cloud-starter-openfeign:服务间通信
feign-httpclient:SpringCloudFeign底层是通过http/https协议进行通信,默认是采用java.net.HttpURLConnection,每次请求都会建立、关闭连接,为了性能考虑,可以引入httpclient、okhttp作为底层的通信框架。

yaml配置

http2:如不开启http2 不加这个配置就行了

server:
  http2:
    enabled: true

https的ssl配置:

server:
  ssl:
    enabled: true
    key-store-password: 123456
    key-store-type: PKCS12
    key-store: classpath:pfx/server.pfx

负载均衡模式配置:

spring:
  cloud:
    kubernetes:
      loadbalancer:
        mode: service

以下是完整配置:

server:
  port: 8080
  http2:
    enabled: true
  ssl:
    enabled: true
    key-store-password: 123456
    key-store-type: PKCS12
    key-store: classpath:pfx/server.pfx

spring:
  application:
    name: test-k8s
  cloud:
    kubernetes:
      loadbalancer:
        mode: service
# 健康检测
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS

k8s服务配置

添加 metadata.labels.secured= 'true '或者 metadata.annotations.secured= 'true ’ 如下:

apiVersion: v1
kind: Service
metadata:
  name: test-k8s
  namespace: dev
  labels:
    app: test-k8s
    secured: 'true'
  annotations:
  	secured: 'true'
spec:
  type: NodePort
  selector:
    app: test-k8s
  ports:
    - name: rest
      port: 8080
      targetPort: 8080
      nodePort: 30001

源码位置:KubernetesClientServiceInstanceMapper.map 返回服务实例
spring.cloud.kubernetes.loadbalancer.mode=service 一定要配置,不然无法使用kubernetes提供的负载均衡。
启用基于 Kubernetes 服务名称的负载平衡,然后负载均衡器会尝试使用地址调用应用程序,例如 test.dev.svc.cluster.local

注意:这个配置是告诉访问该服务的实例,本服务使用的是https通信

测试

部署两个服务,请求测试,服务通信正常,并打印如下实例信息:

c.l.KubernetesClientServicesListSupplier : Getting services with id test-k8s
c.l.KubernetesClientServicesListSupplier : Returning services: [KubernetesServiceInstance{instanceId='94c2101f-e966-47e8-8e1c-67f8625431fe', serviceId='test-k8s', host='test-k8s.dev.svc.cluster.local', port=8080, uri=https://test-k8s.dev.svc.cluster.local:8080, secure=true, namespace=null, cluster=null, metadata={app=test-k8s, secured=true}}]

关闭ssl证书验证:feign.httpclient.disable-ssl-validation=true

总结

三个依赖:spring-cloud-starter-kubernetes-client-loadbalancer ,spring-cloud-starter-openfeign,
feign-httpclient
三个配置:spring.cloud.kubernetes.loadbalancer.mode=service,http2.enabled=true,ssl配置

注意:一定要使用spring-cloud-starter-kubernetes-client-loadbalancer,spring-cloud-starter-loadbalancer这个写死了,secure永远等于false,是无法使用的。访问服务的实例一定要导入这个,目标服务设置标签secured=true

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值