无法从Raspbian中的Pod访问k3s服务的问题

41次阅读
没有评论

问题描述

在Raspbian上安装了K3S Kubernetes,并在其中创建了一个以下MySQL部署:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-data
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-path
  resources:
    requests:
      storage: 100Gi
# 更多的配置...

用户在安装和配置中遇到了问题,无法通过定义的服务访问MySQL。

解决方案

请注意以下操作可能涉及版本差异或配置问题,请仔细核对配置并备份数据。

配置服务

在你的配置中,你定义了两个服务,mysqlmysql-nodeport,它们都使用相同的端口。这可能导致冲突。对于这种单节点的Raspbian设置,建议尝试以下配置:

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  type: NodePort
  selector:
    app: mysql
  ports:
    - port: 3306
      name: mysql
      targetPort: 3306
      nodePort: 30036

根据Kubernetes的服务文档说明:

NodePort: 在每个节点的IP上以固定端口(NodePort)公开服务。自动创建一个ClusterIP服务,路由到NodePort服务。您可以通过请求<节点IP>:从集群外部访问NodePort服务。

通过更新服务配置,并删除其他服务定义,你可以尝试使服务在节点端口上可用。

确认DNS解析

根据你提供的信息,你在Core DNS日志中看到了DNS解析超时的错误。这可能是因为DNS解析配置不正确,导致无法解析MySQL的服务名称。请尝试以下步骤来排除问题:

  1. 确保你的Raspbian主机能够成功解析MySQL服务的名称。可以使用以下命令来测试:
    bash
    nslookup mysql.default.svc.cluster.local

  2. 如果步骤1中的解析成功,但Pod内部无法解析MySQL服务的名称,请确保你的Pod所在的命名空间正确,并且Core DNS正在运行。

验证网络连接

如果上述步骤都没有解决问题,还可以尝试在Pod内部验证网络连接:

  1. 在Pod内部,尝试使用telnet或nc来连接MySQL服务。如果你的Pod中没有安装这些工具,你可以使用apt-get或yum进行安装。
    bash
    telnet mysql.default.svc.cluster.local 3306

  2. 如果telnet命令无法连接,你可以尝试使用ping命令,确认Pod是否能够与MySQL服务所在的节点进行通信。
    bash
    ping <MySQL服务所在节点的IP>

防火墙设置

如果你的Raspbian主机有防火墙配置,确保防火墙不会阻止从Pod到MySQL服务的通信。你可以检查防火墙规则并进行必要的修改。

通过以上步骤,你应该能够定位并解决无法从Pod访问MySQL服务的问题。如果问题仍然存在,请检查你的网络配置、服务定义和防火墙设置,确保所有组件都正确配置并能够相互通信。

正文完