springcloud~服務發(fa)現(xian)之(zhi)k8s服務
springboot開發微服務框架一般(ban)使用springcloud全家桶,而(er)整個項目都(dou)是容器化的,通過(guo)k8s進行編排(pai),而(er)k8s自(zi)己也有服務發現機制,所以我們也可以拋棄springcloud里的eureka,而(er)直接使用k8s自(zi)己的服務。
添加組件
<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. 這時需要(yao)為(wei)k8s賬號角色添加(jia)權限
kubectl create clusterrolebinding permissive-binding \
--clusterrole=cluster-admin \
--user=admin \
--user=kubelet \
--group=system:serviceaccounts