为什么我的 k8s pods 控制台的端口号与 NodePort 不同? [已关闭]

问题描述 投票:0回答:1

我正在尝试为我的 k8s 集群安装 velero 和 minio。我有 1 个主节点和 2 个工作节点。 我的 NodePort 服务有问题。

整体 pod 正在工作,节点端口服务也在运行,但是当我尝试从浏览器访问 minio 仪表板时,它会更改端口号。我认为问题出在我的服务上,所以我还为此创建了另一个问题

实际问题出在控制台端口。

当我运行

kubectl logs minio-8649b94fb5-8cr2k  -n velero
时,我会看到此信息。

WARNING: MINIO_ACCESS_KEY and MINIO_SECRET_KEY are deprecated.
         Please use MINIO_ROOT_USER and MINIO_ROOT_PASSWORD
Formatting 1st pool, 1 set(s), 1 drives per set.
WARNING: Host local has more than 0 drives of set. A host failure will result in data becoming unavailable.
MinIO Object Storage Server
Copyright: 2015-2023 MinIO, Inc.
License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Version: RELEASE.2023-01-25T00-19-54Z (go1.19.4 linux/amd64)

Status:         1 Online, 0 Offline.
API: http://10.244.2.136:9000  http://127.0.0.1:9000
Console: http://10.244.2.136:37269 http://127.0.0.1:37269

Documentation: https://min.io/docs/minio/linux/index.html
Warning: The standard parity is set to 0. This can lead to data loss.

端口号

Console: http://10.244.2.136:37269 http://127.0.0.1:37269
与 Node Port 服务的端口不同。

这是我的 NodePort 服务

master-k8s@masterk8s-virtual-machine:~/velero-v1.2.0-darwin-amd64$ kubectl get svc -n velero
NAME    TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
minio   NodePort   10.97.197.54   <none>        9000:30480/TCP   82m

当我在浏览器中使用服务端口号搜索 URL 时,它会转换为控制台端口,并且我无法访问我的应用程序。

我做了什么来解决这个问题:

  1. 我尝试使用负载均衡器服务,但仍然无法访问该应用程序。
  2. 我还在 service.yaml 文件中分配了 NodePort,它停止更改端口,但我无法访问应用程序。
  3. 我更改了应用程序和服务中的端口仍然是同样的问题。
  4. 日志中已注明此信息。
  5. 我尝试直接在我的Ubuntu VM上安装minio,并且成功了。

我想要什么:

我已经做了我能做的一切。我没有找到任何类似的问题或与此主题相关的任何信息。任何建议都将非常有助于解决这个问题。如何更改控制台端口或使其与服务端口同步?

更新了yaml

apiVersion: v1
kind: Namespace
metadata:
  name: velero

---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: minio
  name: minio
  labels:
    component: minio
spec:
  strategy:
    type: Recreate
  selector:
    matchLabels:
      component: minio
  template:
    metadata:
      labels:
        component: minio
    spec:
      volumes:
      - name: storage
        emptyDir: {}
      - name: config
        emptyDir: {}
      containers:
      - name: minio
        image: minio/minio:latest
        imagePullPolicy: IfNotPresent
        args:
        - server
        - /storage
        - --console-address=:9090
        - --config-dir=/config
        env:
        - name: MINIO_ACCESS_KEY
          value: "minio"
        - name: MINIO_SECRET_KEY
          value: "minio123"
        ports:
        - containerPort: 9000
          name: api
        - containerPort: 9090
          name: console
        volumeMounts:
        - name: storage
          mountPath: "/storage"
        - name: config
          mountPath: "/config"

---
apiVersion: v1
kind: Service
metadata:
  namespace: minio
  name: minio-service
  labels:
    component: minio
spec:
  # ClusterIP is recommended for production environments.
  # Change to NodePort if needed per documentation,
  # but only if you run Minio in a test/trial environment, for example with Minikube.
  type: LoadBalancer
  ports:
    - port: 9000
      targetPort: 9000
      protocol: TCP
  selector:
    component: minio

---
apiVersion: batch/v1
kind: Job
metadata:
  namespace: minio
  name: minio-setup
  labels:
    component: minio
spec:
  template:
    metadata:
      name: minio-setup
    spec:
      restartPolicy: OnFailure
      volumes:
      - name: config
        emptyDir: {}
      containers:
      - name: mc
        image: minio/mc:latest
        imagePullPolicy: IfNotPresent
        command:
        - /bin/sh
        - -c
        - "mc --config-dir=/config config host add velero http://minio:9000 minio minio123 && mc --config-dir=/config mb -p velero/velero"
        volumeMounts:
        - name: config
          mountPath: "/config"
      
ubuntu kubernetes minio velero kubernetes-nodeport
1个回答
0
投票

我们需要告诉 Minio 使用静态控制台端口(默认情况下它在运行时分配一个随机端口)。我们可以通过向

--console-address
命令提供
minio server
参数来做到这一点。这是我用来在本地运行 Minio 的示例部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: minio
  name: minio
  namespace: minio
spec:
  replicas: 1
  selector:
    matchLabels:
      app: minio
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: minio
    spec:
      containers:
      - command:
        - minio
        - server
        - /data
        - --console-address=:9090
        envFrom:
        - secretRef:
            name: minio-creds-9d9kmkc4m4
        image: quay.io/minio/minio:latest
        name: minio
        ports:
        - containerPort: 9000
          name: api
        - containerPort: 9090
          name: console
        volumeMounts:
        - mountPath: /data
          name: minio-data
      volumes:
      - name: minio-data
        persistentVolumeClaim:
          claimName: minio-data

运行

minio server /data --console-address=:9090
;当 Minio 启动时,我们在日志中看到:

Status:         1 Online, 0 Offline.
API: http://10.244.0.11:9000  http://127.0.0.1:9000
Console: http://10.244.0.11:9090 http://127.0.0.1:9090

现在我们已经在静态端口上运行了控制台,我们可以设置您想要的 NodePort 服务:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: minio
  name: minio
  namespace: minio
spec:
  ports:
  - name: api
    nodePort: 30900
    port: 9000
    protocol: TCP
    targetPort: api
  - name: console
    nodePort: 30990
    port: 9090
    protocol: TCP
    targetPort: console
  selector:
    app: minio
  type: NodePort

这会公开端口 30900 上的 API 和端口 30990 上的控制台。


您可以在https://github.com/larsks/k8s-example-minio/找到我的完整测试,包括清单和部署说明。

© www.soinside.com 2019 - 2024. All rights reserved.