如何在集群ip外公开MinIO



我已经在一个节点上安装了MinIO和Kubernetes (K3s)。

命令kubectl logs mypod-0 -n minio返回以下内容:

  • API: http://10.42.0.14:9000 http://127.0.0.1:9000

  • 控制台:http://10.42.0.14:41989 http://127.0.0.1:41989

我可以从第二个链接访问控制台,通过使用python,我可以列出minio中的bucket:

import logging
from minio import Minio
from minio.error import S3Error
# execute from IDE terminal
minio = Minio(
'10.42.0.14:9000',
access_key='chesAccesskeyMinio',
secret_key='chesSecretkey',
secure=False,
)

def list_all_buckets():
bucket_list = minio.list_buckets()
for bucket in bucket_list:
objects = minio.list_objects(bucket.name, recursive=True)
print (bucket.name)
if __name__ == '__main__':
try:
list_all_buckets()
except S3Error as exc:
print("error occurred.", exc)
logging.critical("Object storage not reachable")

我的问题是如何暴露这个IP,以便从我的网络外部(控制台和API)访问。我必须使用入口吗?

根据答案和评论更新

我有两个服务

apiVersion: v1
kind: Service
metadata:
name: ches
namespace: minio
labels:
app: ches
spec:
clusterIP: None
selector:
app: ches
ports:
- port: 9011
name: ches
---
apiVersion: v1
kind: Service
metadata:
name: ches-service
namespace: minio
labels:
app: ches
spec:
type: LoadBalancer
selector:
app: ches
ports:
- port: 9012
targetPort: 9011
protocol: TCP
然后我用 创建了一个入口
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minio
namespace: minio
spec:
rules:
- host: s3.example.com
http:
paths:
- backend:
service:
name: ches-service
port:
number: 9000
path: /
pathType: Prefix

命令kubectl describe Ingress minio -n minio导致:

Name:             minio
Namespace:        minio
Address:          192.168.1.14
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
Host            Path  Backends
----            ----  --------
s3.example.com  
/   ches-service:9000 (10.42.0.14:9011)
Annotations:      <none>
Events:           <none>

但是我不能访问s3.example.com

我错过了什么吗?

是的,Ingress将允许您向集群SDN之外的客户端公开MinIO。

你可能已经有了一个Service对象(如果没有,你需要一个,Ingress指向Service,它解析为Pods)。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minio
spec:
rules:
- host: s3.example.com
http:
paths:
- backend:
service:
name: minio-api
port:
number: 9000
path: /
pathType: Prefix

如果你没有/不想使用入口控制器,你可以使用NodePort服务:

apiVersion: v1
kind: Service
metadata:
name: minio-nodeport
spec:
ports:
- name: http
port: 9000
targetPort: 9000
selector:
name: my-minio-pod
type: NodePort

NodePorts服务被分配一个唯一的端口(在一个范围内/可能根据您的集群配置而变化)。当连接到集群的任何节点时,在该端口上,我们将被重定向到与服务选择器匹配的任何pod。

$> kubectl get svc
my-nodeport-svc  NodePort 10.233.7.160 <none> 9000:32133/TCP

得到我的服务,在它创建后,我可以看到我可以到达端口9000(在SDN),当连接到端口32133 (SDN外)。您可以"kubectl get nodes -o wide",以获得节点IP地址的列表,所有这些都将转发连接到您的pod

相关内容

  • 没有找到相关文章

最新更新