一、背景
有一个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-gray
namespace: java-service
spec:
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: channel-service-gray
port: 6005
protocol: TCP
targetPort: 6005
selector:
app: channel-service-gray
sessionAffinity: None
type: 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-xxxxxxxxxx
finalizers:
- service.k8s.alibaba/resources
name: channel-gray-out-8888
namespace: java-service
spec:
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: channel-gray-out-8888
port: 8888
protocol: TCP
targetPort: 8889
selector:
app: channel-service-gray
sessionAffinity: None
type: 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-xxxxxxxxx
finalizers:
- service.k8s.alibaba/resources
name: channel-gray-inner-8888
namespace: java-service
spec:
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: channel-gray-inner-8888
port: 8888
protocol: TCP
targetPort: 8889
selector:
app: channel-service-gray
sessionAffinity: None
type: LoadBalancer
三、内外网SLB
通过上面的service,将在slb自动建立监听。
-
外网SLB
-
内网SLB
四、总结
你需要新建三个service,一般我们只有一个就足够使用了。
你需要区分内网还是外网SLB,这是因为我们外层没有api网关和域名,提供的是tcp协议。
下一篇我们想要说一说阿里云slb的一个大坑,很深很深的坑。。。