无法连接到 kubernetes 集群中运行 Android 模拟器的 pod 端口

问题描述 投票:0回答:1

我正在 k8s 集群中运行部署。 部署运行一个 android 模拟器映像,该映像为 adb connect 公开端口

5555
。 我正在尝试从集群中的另一个 pod 连接到此端口。

问题是端口 5555 似乎无法从其他 Pod 访问。

该端口有 2 个容器正在运行。除了模拟器之外,还有另一个容器暴露了端口

8000
,并且可以访问该端口。

更多信息: Pod 的 ip 是

172.30.113.239

    来自此集群中另一个 pod 的
  1. curl
    172.30.113.239:5555
    :连接被拒绝。
  2. 来自此集群中另一个 pod 的
  3. curl
    172.30.113.239:8000
    :连接成功。
  4. 来自此 Pod 的
  5. curl
    172.30.113.239:5555
    :连接被拒绝。
  6. 来自此 Pod 的
  7. curl
    172.30.113.239:8000
    :连接成功。
  8. 来自此 Pod 的
  9. curl
    localhost:5555
    :连接成功。
  10. 来自此 Pod 的
  11. curl
    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 android-emulator
1个回答
0
投票

此问题主要发生在您忘记按照 官方 kubernetes 文档中的说明在 kubernetes 中进行端口转发或公开您的服务时。他们解释了部署和公开应用程序端口的每个步骤,以便可以在集群内访问它们。

在上面的文档中,他们使用 mongoDB 作为示例来演示端口转发。在您的情况下,您需要选择 android 模拟器端口并使用端口转发公开它。您可以使用以下命令在 kubernetes 中执行端口转发

kubectl port-forward <name of the pod> 5555:5000

根据此官方 Android 模拟器容器脚本文档,ADB 容器端口似乎已绑定到本地主机。尝试将其绑定到 pod 的 IP,然后进行端口转发,这会将您的 ADB 端口暴露给集群中的其他 pod。

© www.soinside.com 2019 - 2024. All rights reserved.