Как получить доступ к экземпляру MinIO в кластере Kubernetes?

Я развернул сервер MinIO в Kubernetes с помощью cdk8s, использовалminio1как serviceId и открытый порт 9000.

Я ожидал, что смогу получить к нему доступ, используяhttp://minio1:9000, но мой сервер MinIO недоступен как из Prometheus, так и из других экземпляров в моем пространстве имен (Loki, Mimir и т. д.). Есть ли конкретная конфигурация, которую я пропустил, чтобы включить доступ в сети? Сервер запускается без ошибок, так что это звучит как проблема с сетью.

Я запускаю сервер так:

            command: ["minio"],
      args: [
        "server",
        "/data",
        "--address",
        `:9000`,
        "--console-address",
        `:9001`,
      ],

Исправлена ​​​​конфигурация K8S, чтобы выставить как 9000, так и 9001.

          const d = ApiObject.of(minioDeployment);
    
    //Create the empty port list
    d.addJsonPatch(JsonPatch.add("/spec/template/spec/containers/0/ports", []));
    
    //add port for console
    d.addJsonPatch(
      JsonPatch.add("/spec/template/spec/containers/0/ports/0", {
        name: "console",
        containerPort: 9001,
      })
    );
    // add port for bucket
    d.addJsonPatch(
      JsonPatch.replace("/spec/template/spec/containers/0/ports/1", {
        name: "bucket",
        containerPort: 9000,
      })
    );

Может ли это быть связано с многопортовой конфигурацией? Или есть способ явно определить имя хоста как идентификатор службы, чтобы сделать его доступным в пространстве имен Kubernetes?

Вот мое определение службы, сгенерированное cdk8s:

      apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    use-default-egress-policy: "true"
  name: minio1
  namespace: ns-monitoring
spec:
  minReadySeconds: 0
  progressDeadlineSeconds: 600
  replicas: 1
  selector:
    matchExpressions: []
    matchLabels:
      cdk8s.deployment: monitoring-stack-minio1-minio1-deployment-c8e6c44f
  strategy:
    rollingUpdate:
      maxSurge: 50%
      maxUnavailable: 50%
    type: RollingUpdate
  template:
    metadata:
      labels:
        cdk8s.deployment: monitoring-stack-minio1-minio1-deployment-c8e6c44f
    spec:
      automountServiceAccountToken: true
      containers:
        - args:
            - server
            - /data/minio/
            - --address
            - :9000
            - --console-address
            - :9001
          command:
            - minio
          env:
            - name: MINIO_ROOT_USER
              value: userminio
            - name: MINIO_ROOT_PASSWORD
              value: XXXXXXXXXXXXXX
            - name: MINIO_BROWSER
              value: "on"
            - name: MINIO_PROMETHEUS_AUTH_TYPE
              value: public
          image: minio/minio
          imagePullPolicy: Always
          name: minio1-docker
          ports:
            - containerPort: 9001
              name: console
            - containerPort: 9000
              name: bucket
          securityContext:
            privileged: false
            readOnlyRootFilesystem: false
            runAsNonRoot: false
          volumeMounts:
            - mountPath: /data
              name: data
      dnsConfig:
        nameservers: []
        options: []
        searches: []
      dnsPolicy: ClusterFirst
      hostAliases: []
      initContainers: []
      restartPolicy: Always
      securityContext:
        fsGroupChangePolicy: Always
        runAsNonRoot: false
        sysctls: []
      setHostnameAsFQDN: false
      volumes:
        - emptyDir: {}
          name: data
---
apiVersion: v1
kind: Service
metadata:
  labels:
    use-default-egress-policy: "true"
  name: minio1
  namespace: ns-monitoring
spec:
  externalIPs: []
  ports:
    - port: 443
      targetPort: 9001
  selector:
    cdk8s.deployment: stack-minio1-minio1-deployment-c8e6c44f
  type: ClusterIP

1 ответ

Как указано в документе:

Список портов для предоставления из контейнера. Отсутствие указания порта здесь НЕ предотвращает раскрытие этого порта. Любой порт, прослушивающий адрес по умолчанию «0.0.0.0» внутри контейнера, будет доступен из сети.

.

Как предложил @user2311578, его раскрытие на уровне контейнера не делает его автоматически доступным в службе. Вы должны указать его там, когда хотите получить к нему доступ через сервис (и его виртуальный IP-адрес).

Также проверьте ссылку GitHub для получения дополнительной информации.

Другие вопросы по тегам