GCP GKE 负载平衡器连接被拒绝
GCP GKE load balancer connectio refused
我正在 GKE 服务上进行部署,我发现当我尝试访问页面时显示消息
ERR_CONNECTION_REFUSED
我定义了一个部署的负载均衡服务,配置如下
这是部署的 .yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: bonsai-onboarding
spec:
selector:
matchLabels:
app: bonsai-onboarding
replicas: 2
template:
metadata:
labels:
app: bonsai-onboarding
spec:
containers:
- name: bonsai-onboarding
image: "eu.gcr.io/diaphanum/onboarding-iocash-master_web:v1"
ports:
- containerPort: 3000
这是服务 .yaml 文件。
apiVersion: v1
kind: Service
metadata:
name: lb-onboarding
spec:
type: LoadBalancer
selector:
app: bonsai-onboarding
ports:
- protocol: TCP
port: 3000
targetPort: 3000
这个工作正常,在 GKE 中一切都是绿色的:)
kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/bonsai-onboarding-8586b9b699-flhbn 1/1 Running 0 3h23m
pod/bonsai-onboarding-8586b9b699-p9sn9 1/1 Running 0 3h23m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP XX.xx.yy.YY <none> 443/TCP 29d
service/lb-onboarding LoadBalancer XX.xx.yy.YY XX.xx.yy.YY 3000:32618/TCP 3h
然后当我尝试连接时,错误是 ERR_CONNECTION_REFUSED
我认为是关于网络的,因为你在我的本地机器上进行了下一次测试
Ping [load balancer IP] ---> Correct
Telnet [Load Balancer IP] 3000 ---> Correct
从云端 shell 我将端口 3000 转发到 8080 并在其他 cloudShell 中创建 Curl http://localhost:8080,并且工作正常。
对这个问题有什么想法吗?
提前致谢
确保 containerPort 在 deployment/statefulset/pod 的规范中定义并且应用程序正在侦听该端口。还要确保您的防火墙规则没有阻止节点端口。
gcloud compute firewall-rules create myservice --allow tcp:3000
我已经稍微更改了您的部署以在我的集群上检查它,因为您的映像无法访问:
部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: bonsai-onboarding
spec:
selector:
matchLabels:
app: bonsai-onboarding
replicas: 2
template:
metadata:
labels:
app: bonsai-onboarding
spec:
containers:
- name: bonsai-onboarding
image: nginx:latest
ports:
- containerPort: 80
服务:
apiVersion: v1
kind: Service
metadata:
name: lb-onboarding
spec:
type: LoadBalancer
selector:
app: bonsai-onboarding
ports:
- protocol: TCP
port: 3000
targetPort: 80
开箱即用:
kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/bonsai-onboarding-7bdf584499-j2nv7 1/1 Running 0 6m58s
pod/bonsai-onboarding-7bdf584499-vc7kh 1/1 Running 0 6m58s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.XXX.XXX.1 <none> 443/TCP 8m35s
service/lb-onboarding LoadBalancer 10.XXX.XXX.230 35.XXX.XXX.235 3000:31637/TCP 67s
而且我可以从任何 IP 访问 35.XXX.XXX.235:3000
:
Welcome to nginx!
...
Thank you for using nginx.
您可以使用以下命令检查您的应用是否可访问:
nmap -Pn $(kubectl get svc lb-onboarding -o jsonpath='{.status.loadBalancer.ingress[*].ip}')
可能是您在图像配置中 "ERR_CONNECTION_REFUSED" 出现问题的原因?我发现您的部署和负载均衡器配置没有问题。
我正在 GKE 服务上进行部署,我发现当我尝试访问页面时显示消息
ERR_CONNECTION_REFUSED
我定义了一个部署的负载均衡服务,配置如下
这是部署的 .yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: bonsai-onboarding
spec:
selector:
matchLabels:
app: bonsai-onboarding
replicas: 2
template:
metadata:
labels:
app: bonsai-onboarding
spec:
containers:
- name: bonsai-onboarding
image: "eu.gcr.io/diaphanum/onboarding-iocash-master_web:v1"
ports:
- containerPort: 3000
这是服务 .yaml 文件。
apiVersion: v1
kind: Service
metadata:
name: lb-onboarding
spec:
type: LoadBalancer
selector:
app: bonsai-onboarding
ports:
- protocol: TCP
port: 3000
targetPort: 3000
这个工作正常,在 GKE 中一切都是绿色的:)
kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/bonsai-onboarding-8586b9b699-flhbn 1/1 Running 0 3h23m
pod/bonsai-onboarding-8586b9b699-p9sn9 1/1 Running 0 3h23m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP XX.xx.yy.YY <none> 443/TCP 29d
service/lb-onboarding LoadBalancer XX.xx.yy.YY XX.xx.yy.YY 3000:32618/TCP 3h
然后当我尝试连接时,错误是 ERR_CONNECTION_REFUSED
我认为是关于网络的,因为你在我的本地机器上进行了下一次测试
Ping [load balancer IP] ---> Correct
Telnet [Load Balancer IP] 3000 ---> Correct
从云端 shell 我将端口 3000 转发到 8080 并在其他 cloudShell 中创建 Curl http://localhost:8080,并且工作正常。
对这个问题有什么想法吗?
提前致谢
确保 containerPort 在 deployment/statefulset/pod 的规范中定义并且应用程序正在侦听该端口。还要确保您的防火墙规则没有阻止节点端口。
gcloud compute firewall-rules create myservice --allow tcp:3000
我已经稍微更改了您的部署以在我的集群上检查它,因为您的映像无法访问:
部署:
apiVersion: apps/v1 kind: Deployment metadata: name: bonsai-onboarding spec: selector: matchLabels: app: bonsai-onboarding replicas: 2 template: metadata: labels: app: bonsai-onboarding spec: containers: - name: bonsai-onboarding image: nginx:latest ports: - containerPort: 80
服务:
apiVersion: v1 kind: Service metadata: name: lb-onboarding spec: type: LoadBalancer selector: app: bonsai-onboarding ports: - protocol: TCP port: 3000 targetPort: 80
开箱即用:
kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/bonsai-onboarding-7bdf584499-j2nv7 1/1 Running 0 6m58s
pod/bonsai-onboarding-7bdf584499-vc7kh 1/1 Running 0 6m58s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.XXX.XXX.1 <none> 443/TCP 8m35s
service/lb-onboarding LoadBalancer 10.XXX.XXX.230 35.XXX.XXX.235 3000:31637/TCP 67s
而且我可以从任何 IP 访问 35.XXX.XXX.235:3000
:
Welcome to nginx!
...
Thank you for using nginx.
您可以使用以下命令检查您的应用是否可访问:
nmap -Pn $(kubectl get svc lb-onboarding -o jsonpath='{.status.loadBalancer.ingress[*].ip}')
可能是您在图像配置中 "ERR_CONNECTION_REFUSED" 出现问题的原因?我发现您的部署和负载均衡器配置没有问题。