-
Notifications
You must be signed in to change notification settings - Fork 167
RSocket Kubernetes
将RSocket Broker部署在集群之中,方便其他Kubernetes服务进行调用。
- namespace: rsocket
- service name: rsocket-broker
- cluster manager: 基于Spring Cloud Kubernetes提供的ReactiveDiscoveryClient,每5秒钟查询一次服务实例列表
最简单的方式就是使用Helm安装Alibaba RSocket Broker,地址 https://artifacthub.io/packages/helm/alibaba-rsocket-broker/alibaba-rsocket-broker
helm repo add alibaba-rsocket-broker https://alibaba-rsocket-broker.github.io/helm/charts/
helm install rsocket-broker alibaba-rsocket-broker/alibaba-rsocket-broker
运行在Kubernetes中的RSocket会使用到Spring Cloud Kubernetes,所以我们为其提供独立的镜像名称,为 linuxchina/alibaba-rsocket-broker-k8s
。
Kubernetes的RSocket Broker Docker镜像生成非常简单,执行以下命令即可:
$ mvn -Pk8s -pl alibaba-broker-server -DskipTests package spring-boot:build-image
部署RSocket Broker前,我们先将对应的rsocket namespace和角色授权设置,在rsocket-broker-server目录下执行一下以下命令:
$ kubectl apply -f src/main/k8s/setup.yml
注意: 该步骤只需执行一次即可,就是初始化的工作。
接下来就是部署rsocket broker应用,执行
$ kubectl apply -f src/main/k8s/deployment.yml
这样RSocket Broker在Kubernetes上的部署就完毕啦,其对应的DNS地址为 rsocket-broker.rsocket.svc.cluster.local
,具体的集群可能稍有变化,请注意调整。
在example中,包含对应的responder和requester应用,你可以安装对应的步骤进行部署,这里说明一下对应的步骤:
$ mvn -Pbuildpacks -DskipTests clean package
$ kubectl apply -f k8s/responder-deployment.yml
$ kubectl apply -f k8s/requester-deployment.yml
这样responder和requester应用也部署完毕啦,你可以在Kubernetes控制台查看具体的信息。
接下来就是服务的测试,你可以使用kubectl提供的port-forward进行测试
$ kubectl get pods
$ kubectl port-forward rsocket-requester-xxxx 8181:8181
最后通过 curl http://localhost:8181/user/1
进行命令行测试。
RSocket Broker会从$HOME/.rsocket
目录读取rsocket.p12文件进行对应的TLS设置,同时会读取jwt_rsa.pub公钥进行JWT Token的RSA验证。
所以我们需要将这两个文件导入到Kubernetes形成Secret,命令如下:
kubectl create secret generic rsocket-broker-secrets \
--namespace=rsocket \
--from-file=tlsKeyStore=./rsocket.p12 \
--from-file=jwtRSAPubKey=./jwt_rsa.pub
接下来就是要在部署文件中添加对应的volume mount,样例代码如下:
spec:
replicas: 2
template:
metadata:
name: rsocket-broker
labels:
app: rsocket-broker
spec:
containers:
- name: rsocket-broker
image: linuxchina/alibaba-rsocket-broker-k8s:1.1.0-SNAPSHOT
ports:
- containerPort: 9997
- containerPort: 9998
- containerPort: 9999
imagePullPolicy: IfNotPresent
env:
- name: "SPRING_PROFILES_ACTIVE"
value: "kubernetes"
livenessProbe:
httpGet:
path: /actuator/health/liveness
port: 9997
initialDelaySeconds: 30
periodSeconds: 15
failureThreshold: 6
readinessProbe:
httpGet:
path: /actuator/health/readiness
port: 9997
initialDelaySeconds: 30
periodSeconds: 15
failureThreshold: 6
lifecycle:
preStop:
exec:
command: [ "sh", "-c", "sleep 30" ]
volumeMounts:
- name: rsocket-dir
mountPath: "/home/cnb/.rsocket"
readOnly: true
volumes:
- name: rsocket-dir
secret:
secretName: rsocket-broker-secrets
items:
- key: jwtRSAPubKey
path: jwt_rsa.pub
- key: tlsKeyStore
path: rsocket.p12
- Binary: byte stream
- Async message
- Multi transports
- Reactive Semantics
- request/response
- request/stream
- fire-and-forget
- channel
- TCP+TLS
- WebSocket+TLS
- UDP(Aeron)
- RDMA