Kubernetes:在没有主机且没有代理的情况下通过Ingress路由Kubernetes仪表板

如何解决Kubernetes:在没有主机且没有代理的情况下通过Ingress路由Kubernetes仪表板

集群信息:

安装方法:kubeadm
Kubernetes:1.19.2
主节点和节点:Ubuntu 20.04.1(Oracle Virutalbox)
码头工人:19.03.12
印花布:3.16.1
入口:裸机-0.40.1

我想使用没有代理的入口从笔记本电脑访问Kubernetes仪表板吗?

有人可以帮助我执行这些步骤吗?(我在互联网的帮助下尝试了多种方式...不确定我在哪里失踪了?)

注意:在每个论坛上,我都在入口YAML的“部署”部分下添加了“ hostNetwork:true”,以解决“没有主机参数就无法工作”的问题,并注释了“ type:NodePort”。

更新信息:

我已将ingress-controller创建为守护进程而不是部署/吊舱-这有助于直接使用工作IP进行访问。 (这是我的期望-但无法访问kubernetes仪表板,因为它位于其他名称空间中)

入口yaml:它在默认名称空间中运行

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: kdash-in-ns
          port:
            number: 443

kdash-in-ns yaml-带有外部名称的svc

kind: Service
apiVersion: v1
metadata:
  name: kdash-in-ns
  namespace: default
spec:
  type: ExternalName
  externalName: kubernetes-dashboard.kubernetes-dashboard.svc.cluster.local
  ports:
  - name: https
    port: 443

以下有关带有ExternalName的kdash-in-ns svc的详细信息

dockeras@ubuntu3:~/simplek8s/kubernetes/yamls/ingress-demo$ kubectl describe svc kdash-in-ns
Name:              kdash-in-ns
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          <none>
Type:              ExternalName
IP:
External Name:     kubernetes-dashboard.kubernetes-dashboard.svc.cluster.local
Port:              https  443/TCP
TargetPort:        443/TCP
Endpoints:         <none>
Session Affinity:  None
Events:            <none>

kubectl描述了更新的入口路由:在这种情况下,我有ngnix-正常工作(我想入口和nginx都在同一个命名空间中。在显示板中出现错误-因为它在不同的命名空间中(kubernetes-dasbhoard))

dockeras@ubuntu3:~$ kubectl describe ing nginx-ingress
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+,unavailable in v1.22+; use networking.k8s.io/v1 Ingress
Name:             nginx-ingress
Namespace:        default
Address:          192.168.1.31,192.168.1.32
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host        Path  Backends
  ----        ----  --------
  *
              /nginx       nginx-deploy-main:80   )
              /foo         kubernetes-dashboard:443 (<error: endpoints "kubernetes-dashboard" not found>)
              /dashboard   kdash-in-ns:443 (<error: endpoints "kdash-in-ns" not found>)
Annotations:  kubernetes.io/ingress.class: nginx
              nginx.ingress.kubernetes.io/rewrite-target: /$2
Events:
  Type    Reason  Age    From                      Message
  ----    ------  ----   ----                      -------
  Normal  CREATE  4m40s  nginx-ingress-controller  Ingress default/nginx-ingress

当我在下面的浏览器中尝试相同的URL时,将得到响应(我的一个工作IP-192.168.1.31)

192.168.1.31/nginx-使用nginx默认页面响应(pod-nginx-deploy-main)

192.168.1.31/foo-错误页面-503服务暂时不可用(默认为Nginx)

192.168.1.31/控制板-504网关超时(默认为nginx)

运行svc,pod:

All Pods and svcs

解决方法

如果我理解正确,那么您想从外部集群访问kubernetes服务(仪表板)。您可以部署metallb LoadBalancer并管理分配给您的集群的外部集群网络中的IP。

因此,您可以分配IP和LoadBalancer,通过它们您可以访问服务。以下是mssql服务器的示例,但是您可以使用信息中心轻松地使其适应您的需求:

apiVersion: v1
kind: Service
metadata:
  name: sql-server-lb
  namespace: database-server
  annotations:
    metallb.universe.tf/address-pool: default
spec:
  selector:
    app: sql-server
  ports:
  - port: 1433
    targetPort: 1433
  type: LoadBalancer

https://metallb.universe.tf/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?