我正在尝试启动一个接受4个不同端口连接的第三方服务:
x-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: x-deployment
labels:
app: x
...
ports:
- containerPort: 8000 # HttpGraphQLServer
- containerPort: 8001 # WebSocketServer
- containerPort: 8020 # JsonRpcServer
- containerPort: 8030 # HttpIndexingServer
livenessProbe:
tcpSocket:
port: 8020
x服务。亚马尔
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
name: x-rpc-config
spec:
healthCheck:
checkIntervalSec: 7
timeoutSec: 3
healthyThreshold: 2
unhealthyThreshold: 2
type: HTTP2
port: 8020
---
apiVersion: v1
kind: Service
metadata:
name: x-service
annotations:
beta.cloud.google.com/backend-config: '{"default": "x-rpc-config"}'
spec:
selector:
app: x
ports:
- name: graphql
port: 8000
targetPort: 8000
- name: subscription
port: 8001
targetPort: 8001
- name: indexing
port: 8030
targetPort: 8030
- name: jrpc
port: 8020
targetPort: 8020
type: NodePort
进入。亚马尔
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: backend-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: backend-dev-ip-address
networking.gke.io/managed-certificates: backend-certificate
spec:
rules:
- host: x.dev.domain.io
http:
paths:
- path: /rpc
backend:
serviceName: x-service
servicePort: 8020
- path: /idx
backend:
serviceName: x-service
servicePort: 8030
- path: /ws
backend:
serviceName: x-service
servicePort: 8001
- path: /*
backend:
serviceName: x-service
servicePort: 8000
默认情况下,GKE LoadBalancer在HTTP:80上运行运行状况检查,如果我启动后端服务(x-service.yaml)而没有后端配置(
x-rpc-config),它只能检测到2个健康的后端服务,这两个服务都有HTTP端口:8000和8030)。但是,后端服务侦听端口:8020(RPC)和8030(WS)被认为不正常。我相信这是因为协议类型,所以我创建了BackendConfig(
x-rpc-config)来运行TPC运行状况检查,使用端口8020的HTTP2协议,这就是livenessProbe所指向的位置。
Pod和服务已正确创建,但负载均衡器仍然无法将它们检测为健康服务。控制台只是显示以下警告:
某些后端服务处于不健康状态
目标是打开端口8020(RPC),同时保持8000(HTTP)正常工作。有可能吗?我是否需要另一种类型的负载平衡器,或者这只是一个配置问题?
在同一服务下,我找不到任何具有不同协议的多个端口的HealthCheck配置示例。这可能是一种反模式?
提前感谢。
解决方案
我没有使用默认情况下会在GCP上启动HTTP/HTTPs负载平衡器的入口,而是将服务更改为具有自定义的HTTP2健康检查配置的负载平衡器。默认情况下,此配置将在GCP上启动TCP负载平衡器。例如:
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
name: rpc-config
spec:
healthCheck:
checkIntervalSec: 10
timeoutSec: 3
healthyThreshold: 2
unhealthyThreshold: 2
type: HTTP2
port: 8020
---
apiVersion: v1
kind: Service
metadata:
name: x-service
annotations:
cloud.google.com/app-protocols: '{"rpc-a":"HTTP2", "rpc-b":"HTTP2", "rpc-c":"HTTP2"}'
beta.cloud.google.com/backend-config: '{"default": "rpc-config"}'
spec:
selector:
app: x-node
ports:
- name: rpc-a
port: 5001
protocol: TCP
targetPort: 5001
- name: rpc-b
port: 8020
protocol: TCP
targetPort: 8020
- name: rpc-c
port: 8000
protocol: TCP
targetPort: 8000
type: LoadBalancer
下一步是为TCP LB启用SSL。我看到GCP有SSL代理LB,这可能会解决它。只需要找出正确的配置,我在他们的文档中找不到它。
因此,我们正在使用全局MTL部署istio 1.0.2,目前进展顺利。对于健康检查,我们为服务添加了单独的端口,并根据文档进行了配置: https://istio.io/docs/tasks/traffic-management/app-health-check/#mutual-tls-is-enabled 我们的应用程序端口现在位于 8080 上,运行状况检查端口位于 8081 上。完成此操作后
我想netty是我所知道的最好的java网络框架,在阅读并尝试一些示例后,我有疑问: 1.使用netty 4.0为具有不同协议的多端口创建网络服务器的最佳方法是什么? 每个服务器创建: EventLoopGroup bossGroup=new NioEventLoopGroup();//(1) EventLoopGroup workerGroup=新的NioEventLoopGroup(); Se
问题内容: 我遵循了负载均衡器教程:https : //cloud.google.com/container- engine/docs/tutorials/http-balancer 在使用Nginx映像时,当尝试使用自己的应用程序映像时,它工作正常后端切换为不正常。 我的应用程序重定向到/(返回302),但在pod定义中添加了一个: 我的入口看起来像: 服务配置为: 后端健康状况如下: 入口的规
我遵循了负载均衡器教程:https://cloud.google.com/container-engine/docs/tutorials/http-balancer当我使用Nginx映像时工作正常,当我尝试使用我自己的应用程序映像时,尽管后端切换到不健康。 我的应用程序重定向到/(返回302),但我在pod定义中添加了一个livenessProbe: 我的入口看起来像: 服务配置为: 入口中的后端
例如,我可以启动两个程序侦听端口371。第二个没有任何问题地启动并接收传入连接,而第一个没有。一旦最后开始的进程终止,第一个接收它们。 假设这是Windows(XP)行为,它怎么可能是安全的行为呢?这意味着人们可以“过载”任何已经侦听的端口,而不是获得通常的“地址已经在使用”错误消息,并简单地绕过防火墙,规则只是说“允许端口371上的任何传入TCP连接”。
imi 原生支持一个项目,单次启动,监听多个端口多个协议。 比如你要做一个聊天系统,http 用于注册、登录、上传文件等等,WebSocket 用于即时通讯。 http 和 WebSocket 同时做在一个项目中,代码之间没有隔阂,可以方便地互相调用和复用。 子服务器配置 项目配置文件: [ // 子服务器(端口监听)配置 'subServers' => [