如何让kubernetes仪表板通过普通http访问?

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

我正在努力解决这个问题,因为现在基本上已经有几周了......整个互联网上实际上没有一个如何做到这一点的例子。其实很安静很搞笑。

我的仪表板部署:

spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: kubernetes-dashboard
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        k8s-app: kubernetes-dashboard
    spec:
      containers:
      - args:
        - --namespace=kube-system
        - --enable-insecure-login
        - --insecure-bind-address=0.0.0.0
        image: kubernetesui/dashboard:v2.3.0
        imagePullPolicy: IfNotPresent
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /
            port: 9090
            scheme: HTTP
          initialDelaySeconds: 30
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 30
        name: kubernetes-dashboard
        ports:
        - containerPort: 9090
          name: http
          protocol: TCP
        resources: {}
        securityContext:
          allowPrivilegeEscalation: false
          readOnlyRootFilesystem: true
          runAsGroup: 2001
          runAsUser: 1001
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /certs
          name: kubernetes-dashboard-certs
        - mountPath: /tmp

注意以下事项:

截至官方仪表板参数文档

我将参数添加到仪表板部署中:

--enable-insecure-login

这会导致不安全的登录:这意味着仪表板上将提供默认端口 9090(我猜是容器)。

如您所见,我进一步使该容器可以在 kubernetes pod 本身上访问

ports:
        - containerPort: 9090
          name: http
          protocol: TCP

在那之后,..当然我也在仪表板本身的服务中路由了那个端口。

这是我的服务.yaml:

apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"kubernetes-dashboard"},"name":"kubernetes-dashboard","namespace":"kube-system"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}}
  creationTimestamp: "2022-04-05T13:11:22Z"
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
  resourceVersion: "12795"
  selfLink: /api/v1/namespaces/kube-system/services/kubernetes-dashboard
  uid: 01bb1897-e18f-418e-949d-465069b561de
spec:
  clusterIP: 10.152.183.208
  clusterIPs:
  - 10.152.183.208
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - nodePort: 30838
    port: 9090
    protocol: TCP
    targetPort: 9090
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

在这里我们可以清楚地看到端口都已正确分配:

- nodePort: 30838
    port: 443
    protocol: TCP
    targetPort: 9090

nodePort
是可选的..它将是服务将所有这些公开给外界(又名浏览器等)的端口

port
是服务将在集群内部公开的端口。我选择将其保留为默认值。

最后,

targetPort
必须与 Pod 上最初暴露的端口匹配。确实如此。

当然,我在仪表板参数中设置了

--insecure-bind-address=0.0.0.0
,以允许在任何地址上提供不安全的端口。

当我尝试用浏览器访问它时,它就死了。没有反应,什么也没有。

那么我哪里出错了?

真的没有例子吗?如果我设法让它发挥作用,事实上我计划正式向 Kubernetes 本身或一些主要的教程服务提出解决方案。我看到数百人为此苦苦挣扎,最终放弃等等。:D

kubernetes kubernetes-service kubernetes-deployment kubernetes-dashboard
1个回答
0
投票

查看 kubernetes-dashboard 源代码,它要么提供 HTTPS,要么提供 HTTP(但不能同时提供两者)。拥有

--insecure-bind-address=0.0.0.0
insecure-port=9090
并且没有关于 cert/TLS 的参数(即 删除默认值
--auto-generate-certificates
)对我来说很有效。

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