引自免费微信小程序:皆我百晓生
针对您所描述的问题,您的 Oracle Kubernetes 服务器集群主节点无法访问部署的服务,而工作节点可以正常访问。根据您提供的信息,以下是可能的原因分析及相应的解决步骤:
原因分析:
- 网络策略限制:可能存在防火墙规则或其他安全组设置阻止了主节点与服务之间的通信。
- 服务类型问题:您提到已创建了 NodePort 类型的服务。虽然工作节点可以访问,但主节点可能由于某些原因无法通过 NodePort 访问服务。
- 主节点内部配置异常:主节点自身可能存在网络配置错误或 DNS 解析问题。
解决方案:
步骤一:检查主节点网络访问限制
-
防火墙规则:确保主节点上的防火墙规则没有阻止对服务端口(此处为 30000)的访问。检查并暂时禁用(或添加允许规则)相关防火墙设置,如 ufw
、iptables
或 Oracle Cloud Infrastructure (OCI) 上的安全列表规则。
# 示例:查看 ufw 规则
sudo ufw status
# 示例:临时禁用 ufw(仅用于测试)
sudo ufw disable
-
OCI 安全组:如果是 OCI 环境,检查与主节点关联的安全组规则,确保允许从主节点 IP 到服务端口(30000)的流量。
步骤二:验证主节点到服务的网络连通性
-
Ping 测试:尝试从主节点 ping 工作节点(如 k8s-worker2),确认基础网络连通性。
ping k8s-worker2
-
端口连通性测试:使用 telnet 或 nc 命令检查主节点是否能直接连接到工作节点上的服务端口(30000)。
# 使用 telnet
telnet k8s-worker2 30000
# 或使用 nc
nc -vz k8s-worker2 30000
步骤三:检查主节点 DNS 解析
-
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
步骤四:调整服务类型或访问方式
-
更改服务类型:考虑将服务类型更改为 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 使用
-
直接访问工作节点:如果主节点和工作节点在同一个网络环境中,可暂时直接通过工作节点 IP 和 NodePort 访问服务(如 curl http://k8s-worker2:30000
),以排除 Kubernetes 服务层的问题。
完成上述排查步骤后,您应该能找到主节点无法访问服务的原因,并采取相应措施进行修复。如果问题依然存在,请提供详细的排查结果和日志信息,以便进一步分析。
关于您提到的其他任务,即编写 Python Web 服务、构建 Docker 镜像、创建 Kubernetes 集群、部署服务以及使用 Locust 进行负载测试等,由于这些内容与当前问题无关且涉及大量具体实现细节,建议您按照项目要求分别进行操作。如果您在执行这些任务时遇到具体问题,欢迎提出针对性的疑问,我会为您提供详细的解答和指导。