springboot開發微服務框架一般使用springcloud全家桶,而整個項目都是容器化的,通過k8s進行編排,而k8s自己也有服務發現機制,所以我們也可以拋棄springcloud里的eureka,而直接使用k8s自己的服務。
添加組件
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-ribbon</artifactId>
<version>0.3.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes</artifactId>
<version>0.3.0.RELEASE</version>
</dependency>
注意點
- application.name與k8s的服務名相同,即feign里的服務名稱
- 必須要開啟@EnableDiscoveryClient注解
- springcloud的配置中心需要和項目在一個namespace里,即k8s的clusterIp不能跨namespace,如果是多個namespace需要用nodeport模式
- 使用feign時,它的服務同樣需要是同一個namespace下的
spring:
application:
name: hello-world-service
cloud:
config:
uri: http://config-server-service #集群內部的端口,需要是一個namespace里的,目前配置中心的端口為80
fail-fast: true
添加k8s里用戶權限
默認情況下,進行k8s服務調用里會出現用戶權限的錯誤Message: Forbidden!Configured service account doesn't have access. 這時需要為k8s賬號角色添加權限
kubectl create clusterrolebinding permissive-binding \
--clusterrole=cluster-admin \
--user=admin \
--user=kubelet \
--group=system:serviceaccounts
