开发者
资源
文档评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

容器外部网络无法访问服务的解决方法

现象描述

在Kubernetes环境中,容器外部网络(如集群外的客户端)无法访问容器内部运行的devkitai-server服务。

可能原因

  • 服务绑定地址为空:DevKit AI的config.yaml配置文件中配置的server.host未正确配置,服务可能无法被外部网络访问。
  • ClusterIP访问范围限制:若配置为Kubernetes集群的ClusterIP(如10.244.0.x),则该IP仅在集群内部网络路由,集群外部的客户端无法访问。
  • 端口映射不一致:DevKit AI的config.yaml配置文件中配置的server.port与Kubernetes Service/NodePort映射的端口不一致,导致流量无法正确转发。

处理步骤

  1. 配置Kubernetes端口映射。
    1. 打开配置文件。
      vi my-service.yaml
    2. 按“i”进入编辑模式,配置示例如下:
      apiVersion: v1
      kind: Service
      metadata:
        name: devkitai-service
        namespace: <namespace>
      spec:
        type: NodePort   # 或 LoadBalancer,视访问需求选择
        selector:
          app: devkitai
        ports:
          - port: <service端口>    # 与config.yaml中server.port一致
            targetPort: <容器端口> # 与config.yaml中server.port一致
            nodePort: <节点端口>   # 外部访问端口范围30000-32767
    3. 按“Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出文件。
    4. 创建或更新Service服务。
      kubectl apply -f my-service.yaml
      • 请将使用示例中配置Kubernetes端口映射的“my-service.yaml”请替换为你的实际配置文件。
      • 配置示例中ports.port与targetPort配置的端口务必与4中DevKit AI的config.yaml配置文件中配置的server.port保持一致。
  2. 进入DevKit AI基础包解压后目录。
    cd DevKit-AI-x.x.x-Linux-Kunpeng
  3. 编辑“config/config.yaml”文件。
    vi config/config.yaml
  4. 按“i”进入编辑模式,修改如下内容。
    # 服务基础核心配置
    server:
      # 支持协议:http / https 默认https;用户需填写host值;port值默认为8000
      protocol: http
      host: 0.0.0.0    # 允许所有网络接口侦听,使外部网络可访问
      port: xxxx   # 与Service端口映射一致

    (可选)若需配置为集群内部访问而非外部访问,可按照如下操作:

    1. 查看Pod信息或通过describe查看Pod IP。
      kubectl get pods -n <namespace> -o wide

      或

      kubectl describe pod <pod-name> -n <namespace> | grep "IP:"
    2. 编辑DevKit AI工具目录“config/config.yaml”文件,按“i”进入编辑模式,修改如下内容。
      # 服务基础核心配置
      server:
        # 支持协议:http / https 默认https;用户需填写host值;port值默认为8000
        protocol: http
        host: <pod-ip>    # 仅限集群内部访问,外部客户端无法连接
        port: xxxx   # 与Service端口映射一致

      请将“pod-ip”替换为4.a中获取到的Pod IP。

    • server.host设置为“0.0.0.0”可使服务暴露于所有网络接口,若留空或配置为“127.0.0.1”,则仅本地进程可访问,外部网络请求无法到达。
    • server.port参数请与Kubernetes Service/NodePort映射的端口保持一致,否则会导致流量无法正确转发。
    • DevKit AI的config.yaml配置文件中的server.host配置为具体ClusterIP时,仅集群内部服务器可访问,外部客户端无法连接。此方式不适用于需要外部访问的场景。
  5. 按“Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出文件。
  6. 重新启动DevKit AI Server服务。
    systemctl restart devkitai-server
  7. 验证服务可访问性。
    • 从集群节点内部测试。
      curl http://<pod-ip>:<port>/run
    • 从集群外部测试。
      curl http://<node-ip>:<nodePort>/run

      使用示例验证服务可访问性时请将“pod-ip”、“port”、“node-ip”、“nodePort”替换为你的实际IP和端口值。