我正在 k8s 集群中运行部署。 部署运行一个 android 模拟器映像,该映像为 adb connect 公开端口
5555
。
我正在尝试从集群中的另一个 pod 连接到此端口。
问题是端口 5555 似乎无法从其他 Pod 访问。
该端口有 2 个容器正在运行。除了模拟器之外,还有另一个容器暴露了端口
8000
,并且可以访问该端口。
更多信息: Pod 的 ip 是
172.30.113.239
。
172.30.113.239:5555
:连接被拒绝。172.30.113.239:8000
:连接成功。172.30.113.239:5555
:连接被拒绝。172.30.113.239:8000
:连接成功。localhost:5555
:连接成功。localhost:8000
:连接成功。这对我来说真的很奇怪,因为我没有看到端口
5555
和 8888
之间有任何区别,知道是什么可能导致这个问题吗?
这是部署文件的简介。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/managed-by: Helm
service: android-emulator
name: android-emulator
namespace: test
spec:
replicas: 1
selector:
matchLabels:
service: android-emulator
template:
metadata:
labels:
service: android-emulator
spec:
containers:
- command:
- /bin/sh
- -c
- cd /opt/android-sdk-linux;emulator -avd avd30 -no-window -memory 4096 -cores
4;sleep 99999
env:
- name: resources
value: 4c4Gig8Gis
image: test/android30:v1.1.0
imagePullPolicy: IfNotPresent
name: android-emulator
securityContext:
privileged: true
ports:
- containerPort: 5555
protocol: TCP
- env:
- name: resources
value: 2c4Gig8Gis
- name: serviceName
value: scrcpy
image: test/scrcpy-web:1.0.0
imagePullPolicy: IfNotPresent
name: testtest-android-emulator-scrcpy
ports:
- containerPort: 8000
protocol: TCP
dnsPolicy: ClusterFirst
restartPolicy: Always
terminationGracePeriodSeconds: 30
编辑2:
我使用的图像来自此存储库
https://github.com/docker-android-sdk/android-30
,它是Android模拟器的修改版本。
我认为这更多的是 docker 镜像问题,而不是 k8s,正如 @Dolphin 所建议的。我仍在尝试弄清楚如何配置地址绑定。
此问题主要发生在您忘记按照 官方 kubernetes 文档中的说明在 kubernetes 中进行端口转发或公开您的服务时。他们解释了部署和公开应用程序端口的每个步骤,以便可以在集群内访问它们。
在上面的文档中,他们使用 mongoDB 作为示例来演示端口转发。在您的情况下,您需要选择 android 模拟器端口并使用端口转发公开它。您可以使用以下命令在 kubernetes 中执行端口转发
kubectl port-forward <name of the pod> 5555:5000
根据此官方 Android 模拟器容器脚本文档,ADB 容器端口似乎已绑定到本地主机。尝试将其绑定到 pod 的 IP,然后进行端口转发,这会将您的 ADB 端口暴露给集群中的其他 pod。