我已经在一个节点上安装了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