You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MicroK8s环境中通过Python API连接Minio Pod

问题:MicroK8s中Minio控制台可访问但Python API无法连接

环境信息

执行microk8s kubectl get all --all-namespaces的输出:

NAMESPACE        NAME                                            READY   STATUS    RESTARTS      AGE
minio-operator   pod/minio-operator-67dcf6dd7c-vxccn             0/1     Pending   0             7d22h
kube-system      pod/calico-node-bpd4r                           1/1     Running   4 (26m ago)   8d
kube-system      pod/dashboard-metrics-scraper-7bc864c59-t7k87   1/1     Running   4 (26m ago)   8d
kube-system      pod/hostpath-provisioner-69cd9ff5b8-x664l       1/1     Running   4 (26m ago)   7d22h
kube-system      pod/kubernetes-dashboard-dc96f9fc-4759w         1/1     Running   4 (26m ago)   8d
minio-operator   pod/console-66c4b79fbd-mw5s8                    1/1     Running   3 (26m ago)   7d22h
kube-system      pod/calico-kube-controllers-79568db7f8-vg4q2    1/1     Running   4 (26m ago)   8d
kube-system      pod/coredns-6f5f9b5d74-fz7v8                    1/1     Running   4 (26m ago)   8d
kube-system      pod/metrics-server-6f754f88d-r7lsj              1/1     Running   4 (26m ago)   8d
minio-operator   pod/minio-operator-67dcf6dd7c-8dnlq             1/1     Running   9 (25m ago)   7d22h
minio-operator   pod/microk8s-ss-0-0                             1/1     Running   9 (25m ago)   7d22h

NAMESPACE        NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default          service/kubernetes                  ClusterIP   10.152.183.1     <none>        443/TCP                  11d
kube-system      service/kube-dns                    ClusterIP   10.152.183.10    <none>        53/UDP,53/TCP,9153/TCP   8d
kube-system      service/metrics-server              ClusterIP   10.152.183.43    <none>        443/TCP                  8d
kube-system      service/kubernetes-dashboard        ClusterIP   10.152.183.232   <none>        443/TCP                  8d
kube-system      service/dashboard-metrics-scraper   ClusterIP   10.152.183.226   <none>        8000/TCP                 8d
minio-operator   service/operator                    ClusterIP   10.152.183.48    <none>        4222/TCP,4221/TCP        7d22h
minio-operator   service/console                     ClusterIP   10.152.183.193   <none>        9090/TCP,9443/TCP        7d22h
minio-operator   service/minio                       ClusterIP   10.152.183.195   <none>        80/TCP                   7d22h
minio-operator   service/microk8s-console            ClusterIP   10.152.183.192   <none>        9090/TCP                 7d22h
minio-operator   service/microk8s-hl                 ClusterIP   None             <none>        9000/TCP                 7d22h

NAMESPACE     NAME                         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
kube-system   daemonset.apps/calico-node   1         1         1       1            1           kubernetes.io/os=linux   8d

NAMESPACE        NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
kube-system      deployment.apps/coredns                     1/1     1            1           8d
kube-system      deployment.apps/dashboard-metrics-scraper   1/1     1            1           8d
kube-system      deployment.apps/kubernetes-dashboard        1/1     1            1           8d
minio-operator   deployment.apps/console                     1/1     1            1           7d22h
kube-system      deployment.apps/hostpath-provisioner        1/1     1            1           7d22h
kube-system      deployment.apps/calico-kube-controllers     1/1     1            1           8d
kube-system      deployment.apps/metrics-server              1/1     1            1           8d
minio-operator   deployment.apps/minio-operator              1/2     2            1           7d22h

NAMESPACE        NAME                                                  DESIRED   CURRENT   READY   AGE
kube-system      replicaset.apps/coredns-6f5f9b5d74                    1         1         1       8d
kube-system      replicaset.apps/dashboard-metrics-scraper-7bc864c59   1         1         1       8d
kube-system      replicaset.apps/kubernetes-dashboard-dc96f9fc         1         1         1       8d
minio-operator   replicaset.apps/console-66c4b79fbd                    1         1         1       7d22h
kube-system      replicaset.apps/hostpath-provisioner-69cd9ff5b8       1         1         1       7d22h
kube-system      replicaset.apps/calico-kube-controllers-79568db7f8    1         1         1       8d
kube-system      replicaset.apps/metrics-server-6f754f88d              1         1         1       8d
minio-operator   replicaset.apps/minio-operator-67dcf6dd7c             2         2         1       7d22h

NAMESPACE        NAME                             READY   AGE
minio-operator   statefulset.apps/microk8s-ss-0   1/1     7d22h

尝试的Python代码

client = Minio("microk8s-ss-0-0", secure=False)

try:
    objects = client.list_objects("bucket-1", prefix='/', recursive=True)
    for obj in objects:
        print(obj.bucket_name)
except InvalidResponseError as err:
    print(err)

错误信息

MaxRetryError: HTTPConnectionPool(host='microk8s-ss-0-0', port=80): Max retries exceeded with url: /bucket-1?delimiter=&encoding-type=url&list-type=2&max-keys=1000&prefix=%2F (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f29041e1e40>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'))

已尝试的方法

  • 使用Pod名称microk8s-ss-0-0连接
  • 使用Minio Service的ClusterIP10.152.183.195连接

解决方案

1. 区分代码运行环境

集群外部运行代码

ClusterIP仅能在Kubernetes集群内部访问,外部机器无法直接连接,这是解析失败的核心原因。两种解决方式:

  • 修改Service为NodePort类型:
    microk8s kubectl patch service minio -n minio-operator -p '{"spec":{"type":"NodePort"}}'
    
    执行后获取分配的NodePort:
    microk8s kubectl get service minio -n minio-operator
    
    代码中使用集群节点IP:NodePort作为地址,示例:
    client = Minio("192.168.1.100:30000", secure=False)  # 替换为你的节点IP和NodePort
    
  • 端口转发临时访问:
    在集群节点执行命令,将Minio Service的80端口映射到本地9000端口:
    microk8s kubectl port-forward service/minio -n minio-operator 9000:80
    
    代码中用localhost:9000连接:
    client = Minio("localhost:9000", secure=False)
    

集群内部运行代码

如果代码在集群内Pod中运行,直接用Service的DNS名称访问:

  • 同命名空间:minio:80
  • 跨命名空间:minio.minio-operator.svc.cluster.local:80

2. 添加Minio认证信息

你的代码缺少Access Key和Secret Key,Minio默认需要认证才能访问。补充认证信息的代码示例:

from minio import Minio
from minio.error import InvalidResponseError

# 替换为你的Minio Access Key和Secret Key
client = Minio(
    "localhost:9000",  # 根据环境替换为正确地址
    access_key="YOUR_ACCESS_KEY",
    secret_key="YOUR_SECRET_KEY",
    secure=False
)

try:
    objects = client.list_objects("bucket-1", prefix='/', recursive=True)
    for obj in objects:
        print(obj.bucket_name)
except InvalidResponseError as err:
    print(err)

3. 确认端口映射正确性

从kubectl输出可见,Minio Service的80端口对应Pod的9000端口(StatefulSet的microk8s-hl服务暴露9000端口),确保连接时使用正确的端口。


内容的提问来源于stack exchange,提问作者Mark C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:33:25