Skip to content
This repository has been archived by the owner on Jul 16, 2024. It is now read-only.

RSocket Kubernetes

linux_china edited this page Apr 25, 2021 · 3 revisions

将RSocket Broker部署在集群之中,方便其他Kubernetes服务进行调用。

准备工作

  • namespace: rsocket
  • service name: rsocket-broker
  • cluster manager: 基于Spring Cloud Kubernetes提供的ReactiveDiscoveryClient,每5秒钟查询一次服务实例列表

Helm支持

最简单的方式就是使用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 Broker Docker镜像

运行在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的Kubernetes部署

部署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,具体的集群可能稍有变化,请注意调整。

RSocket的应用部署

在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 进行命令行测试。

TLS证书和秘钥设置

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

RSocket

Network Protocol

  • Binary: byte stream
  • Async message
  • Multi transports
  • Reactive Semantics

Symmetric interactions

  • request/response
  • request/stream
  • fire-and-forget
  • channel

Transports

  • TCP+TLS
  • WebSocket+TLS
  • UDP(Aeron)
  • RDMA

Polyglot

Clone this wiki locally