Kubernetes仪表板通过kubectl代理-端口混淆

Kubernetes仪表板通过kubectl代理-端口混淆,kubernetes,Kubernetes,我已经看到,通过kubectl代理访问http服务的标准方法如下: http://api.host/api/v1/namespaces/NAMESPACE/services/SERVICE_NAME:SERVICE_PORT/proxy/ 为什么kubernetes dashboard使用https:kubernetes dashboard:作为SERVICE\u NAME:SERVICE\u PORT 我会根据以下内容假设它是kubernetes_dashboard:443 kubectl -

我已经看到,通过kubectl代理访问http服务的标准方法如下:
http://api.host/api/v1/namespaces/NAMESPACE/services/SERVICE_NAME:SERVICE_PORT/proxy/

为什么kubernetes dashboard使用
https:kubernetes dashboard:
作为
SERVICE\u NAME:SERVICE\u PORT

我会根据以下内容假设它是kubernetes_dashboard:443

kubectl -n kube-system get service kubernetes-dashboard -o wide
NAME                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE   SELECTOR
kubernetes-dashboard   ClusterIP   10.233.50.212   <none>        443:31663/TCP   15d   k8s-app=kubernetes-dashboard
我已经创建了一个简单的服务,但它没有显示在这里,我很困惑如何确定哪些服务显示在这里或没有

为什么kubernetes仪表板会使用它 https:kubernetes仪表板:用于服务\u名称:服务\u端口

此外,当所有端口都显示为443:31663时,端口显示的含义是什么 其他服务只有x/TCP(x是一个数字而不是一个数字) x:y)

如中所述,默认方式为

http://kubernetes_master_address/api/v1/namespaces/namespace_name/services/service_name[:port_name]/proxy
默认情况下,API服务器使用http代理您的服务。使用 https,在服务名称前面加上https::

http://kubernetes_master_address/api/v1/namespaces/namespace_name/services/https:service_name:[端口名称]/proxy

URL的名称段支持的格式为:

-使用http代理默认或未命名的端口

-使用http代理指定端口

https::
-使用https代理默认或未命名的端口(注意尾随的冒号)

https::
-使用https代理指定端口

下一步:

我已经创建了一个简单的服务,但它没有显示在这里,我是 不知道如何确定此处显示哪些服务

我为您找到并测试了什么:

:

使用标签显示主机和服务的地址kubernetes.io/cluster service=true要进一步调试和诊断群集问题,请使用“kubectl cluster info dump”

因此,只要您添加
kubernetes.io/cluster-service:“true”
标签,就可以在
kubectl cluster info
下看到服务

但是!!当您看到您的服务在几分钟内从输出中消失时,会出现预期的行为。解释已经找到-我只是复制粘贴在这里供将来参考

另一部分是插件管理器。它使用此注释来 将群集状态与静态清单文件同步。这个 行为是这样的:

1) 插件管理器从磁盘读取yaml->部署内容

2) addon manager使用注释群集服务从api服务器读取所有部署:true->删除所有不作为文件存在的部署

因此,如果您添加此批注,插件管理器将在大约一分钟后删除仪表板。

所以

仪表板在集群创建后部署->不应设置注释:

仪表板是集群创建的一部分->应设置注释:

至少这是不久前的行为。我认为kubeadm不使用插件管理器。但它仍然是kube up脚本的一部分

此行为的解决方案也存在:添加附加标签
addonmanager.kubernetes.io/mode:EnsureExists

解释是

您的最终服务应该如下所示:

# ------------------- Dashboard Service ------------------- #

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: EnsureExists
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard



kubectl get svc kubernetes-dashboard -n kube-system -o yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"addonmanager.kubernetes.io/mode":"EnsureExists","k8s-app":"kubernetes-dashboard","kubernetes.io/cluster-service":"true"},"name":"kubernetes-dashboard","namespace":"kube-system"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}}
  labels:
    addonmanager.kubernetes.io/mode: EnsureExists
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"



kubectl cluster-info
Kubernetes master is running at https://*.*.*.*
...
kubernetes-dashboard is running at https://*.*.*.*/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
...

如果名称是
name:kubernetes dashboard
port:443
,而不是
https:kubernetes dashboard:
,是否应该是
kubernetes dashboard:443
?另外,我知道kubectl get
服务——所有名称空间
,但我的问题是关于
kubectl cluster info
上显示的服务,而不是列出一般的服务。请完全为您重写答案
# ------------------- Dashboard Service ------------------- #

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: EnsureExists
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard



kubectl get svc kubernetes-dashboard -n kube-system -o yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"addonmanager.kubernetes.io/mode":"EnsureExists","k8s-app":"kubernetes-dashboard","kubernetes.io/cluster-service":"true"},"name":"kubernetes-dashboard","namespace":"kube-system"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}}
  labels:
    addonmanager.kubernetes.io/mode: EnsureExists
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"



kubectl cluster-info
Kubernetes master is running at https://*.*.*.*
...
kubernetes-dashboard is running at https://*.*.*.*/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
...