springboot+k8s+拋棄springcloud.eureka
springboot開發微(wei)服(fu)(fu)務(wu)(wu)框架一般使用springcloud全家桶,而整(zheng)個項目(mu)都是容器化(hua)的(de),通過k8s進(jin)行編排,而k8s自(zi)己(ji)也有服(fu)(fu)務(wu)(wu)發現機(ji)制(zhi),所以我們也可(ke)以拋(pao)棄springcloud里的(de)eureka,而直接使用k8s自(zi)己(ji)的(de)服(fu)(fu)務(wu)(wu)。
添加組件
<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: //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