一、背景
有一个websocket应用程序,使用spring boot框架开发,http端口号是6005,提供的是websocket服务,所以它还监听一个8889端口的tcp协议。
现在要把它部署到阿里云的k8s容器里,本文着重描述service层的配置。
因为本应用程序对外提供的服务协议是tcp,所以访问链路相对http应用程序更简单,没有经过api网关,甚至也没有域名解析。
二、架构图
1、NodePort类型的service
http协议不对外提供服务,这里的端口号是6005。
apiVersion: v1
kind: Service
metadata:name: channel-service-graynamespace: java-service
spec:ipFamilies:- IPv4ipFamilyPolicy: SingleStackports:- name: channel-service-grayport: 6005protocol: TCPtargetPort: 6005selector:app: channel-service-graysessionAffinity: Nonetype: NodePort
- consul的健康检测,依赖于http端口号6005
2、外网Service
填写alicloud-loadbalancer-id为具体值。
apiVersion: v1
kind: Service
metadata:annotations:service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true'service.beta.kubernetes.io/alicloud-loadbalancer-id: lb-xxxxxxxxxxfinalizers:- service.k8s.alibaba/resourcesname: channel-gray-out-8888namespace: java-service
spec:ipFamilies:- IPv4ipFamilyPolicy: SingleStackports:- name: channel-gray-out-8888port: 8888protocol: TCPtargetPort: 8889selector:app: channel-service-graysessionAffinity: Nonetype: LoadBalancer
3、内网Service
与上类同,差异点是不同的slb。
apiVersion: v1
kind: Service
metadata:annotations:service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true'service.beta.kubernetes.io/alicloud-loadbalancer-id: lb-xxxxxxxxxfinalizers:- service.k8s.alibaba/resourcesname: channel-gray-inner-8888namespace: java-service
spec:ipFamilies:- IPv4ipFamilyPolicy: SingleStackports:- name: channel-gray-inner-8888port: 8888protocol: TCPtargetPort: 8889selector:app: channel-service-graysessionAffinity: Nonetype: LoadBalancer
三、内外网SLB
通过上面的service,将在slb自动建立监听。
-
外网SLB
-
内网SLB
四、总结
你需要新建三个service,一般我们只有一个就足够使用了。
你需要区分内网还是外网SLB,这是因为我们外层没有api网关和域名,提供的是tcp协议。
下一篇我们想要说一说阿里云slb的一个大坑,很深很深的坑。。。