miroCyber 2024-04-16 11:26 采纳率: 40%
浏览 16
已结题

Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问

我在oracle建了三个虚拟机,一个为主节点,其他2个是工作节点。让他们建立Kubernetes服务器集群,然后我建立了docker镜像,创建了pod容器,开放了端口30000。现在进行测试.我的主节点无法访问,但是其他2个工作节点可以访问并且进行测试。请问怎么解决。谢谢。

img

img

似乎其他设置都没有问题。

1 概述和背景
本项目旨在构建一个基于 Web 的系统,我们称之为 CloudDetect。它将允许终端用户将图片发送到由 Docker 容器托管的 Web 服务,并接收其上传图片中检测到的对象列表。Web 服务将作为容器在 Kubernetes 集群中托管。Kubernetes 将被用作容器编排系统。
编写一个 Python Web 服务,它接受以 JSON 对象格式的图像,使用 YOLO 和 OpenCV 处理图像,并返回一个带有检测到的对象列表的 JSON 对象。
为对象检测 Web 服务构建一个 Docker 镜像。
在 Oracle 云基础设施(OCI)中的虚拟机(实例)上创建一个 Kubernetes 集群(1个主节点,2个工作节点)。
部署一个 Kubernetes 服务,以在运行对象检测服务的 Pods 之间分配入站请求。
使用 Loucust 编写负载生成脚本。
在不同的负载和 Pods 数量条件下测试系统。

  • 写回答

9条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-16 11:27
    关注

    引自免费微信小程序:皆我百晓生

    针对您所描述的问题,您的 Oracle Kubernetes 服务器集群主节点无法访问部署的服务,而工作节点可以正常访问。根据您提供的信息,以下是可能的原因分析及相应的解决步骤:

    原因分析:

    1. 网络策略限制:可能存在防火墙规则或其他安全组设置阻止了主节点与服务之间的通信。
    2. 服务类型问题:您提到已创建了 NodePort 类型的服务。虽然工作节点可以访问,但主节点可能由于某些原因无法通过 NodePort 访问服务。
    3. 主节点内部配置异常:主节点自身可能存在网络配置错误或 DNS 解析问题。

    解决方案:

    步骤一:检查主节点网络访问限制

    1. 防火墙规则:确保主节点上的防火墙规则没有阻止对服务端口(此处为 30000)的访问。检查并暂时禁用(或添加允许规则)相关防火墙设置,如 ufwiptables 或 Oracle Cloud Infrastructure (OCI) 上的安全列表规则。

      # 示例:查看 ufw 规则
      sudo ufw status
      
      # 示例:临时禁用 ufw(仅用于测试)
      sudo ufw disable
      
    2. OCI 安全组:如果是 OCI 环境,检查与主节点关联的安全组规则,确保允许从主节点 IP 到服务端口(30000)的流量。

    步骤二:验证主节点到服务的网络连通性

    1. Ping 测试:尝试从主节点 ping 工作节点(如 k8s-worker2),确认基础网络连通性。

      ping k8s-worker2
      
    2. 端口连通性测试:使用 telnet 或 nc 命令检查主节点是否能直接连接到工作节点上的服务端口(30000)。

      # 使用 telnet
      telnet k8s-worker2 30000
      
      # 或使用 nc
      nc -vz k8s-worker2 30000
      

    步骤三:检查主节点 DNS 解析

    1. DNS 查看与解析:确认主节点能否正确解析服务的 ClusterIP 或 NodePort IP。使用 nslookup 或 dig 命令查询服务的 ClusterIP(10.107.181.238)和 NodePort IP(如工作节点 IP 加端口 30000)。

      nslookup 10.107.181.238
      
      # 或
      dig @localhost -p 10053 10.107.181.238
      
      # 检查 NodePort IP
      nslookup k8s-worker2:30000
      
      # 或
      dig @localhost -p 10053 k8s-worker2:30000
      

    步骤四:调整服务类型或访问方式

    1. 更改服务类型:考虑将服务类型更改为 LoadBalancer(如果有可用的云提供商 Load Balancer)或 Ingress(需要安装 ingress controller),以便更灵活地控制外部访问。

      apiVersion: v1
      kind: Service
      metadata:
        name: cloudiod-service
      spec:
        selector:
          app: cloudiod-app
        ports:
          - protocol: TCP
            port: 5500
            targetPort: 30000
        type: LoadBalancer # 或者 Ingress,需配合 Ingress Controller 使用
      
    2. 直接访问工作节点:如果主节点和工作节点在同一个网络环境中,可暂时直接通过工作节点 IP 和 NodePort 访问服务(如 curl http://k8s-worker2:30000),以排除 Kubernetes 服务层的问题。

    完成上述排查步骤后,您应该能找到主节点无法访问服务的原因,并采取相应措施进行修复。如果问题依然存在,请提供详细的排查结果和日志信息,以便进一步分析。

    关于您提到的其他任务,即编写 Python Web 服务、构建 Docker 镜像、创建 Kubernetes 集群、部署服务以及使用 Locust 进行负载测试等,由于这些内容与当前问题无关且涉及大量具体实现细节,建议您按照项目要求分别进行操作。如果您在执行这些任务时遇到具体问题,欢迎提出针对性的疑问,我会为您提供详细的解答和指导。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月16日
  • 创建了问题 4月16日

悬赏问题

  • ¥15 有人能看一下我宿舍管理系统的报修功能该怎么改啊?链表那里总是越界
  • ¥15 cs loadimage运行不了,easyx也下了,没有用
  • ¥15 r包runway详细安装教程
  • ¥15 Html中读取Json文件中数据并制作表格
  • ¥15 谁有RH342练习环境
  • ¥15 STM32F407 DMA中断问题
  • ¥15 uniapp连接阿里云无法发布消息和订阅
  • ¥25 麦当劳点餐系统代码纠错
  • ¥15 轮班监督委员会问题。
  • ¥20 关于变压器的具体案例分析