如何解决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:
解决方法
如果我理解正确,那么您想从外部集群访问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