k8s集群安装Ingress,KubeSphere可视化界面安装K8s

本文介绍了如何在Kubernetes集群中部署Ingress控制器,包括yaml配置文件的创建和应用,以及通过Ingress实现服务的外部访问和负载均衡。首先,部署Ingress控制器涉及ConfigMap、ServiceAccount、Role和RoleBinding等多个对象的定义。接着,创建Ingress规则,通过定义host和路径映射到特定服务。最后,通过修改hosts文件并访问域名,验证Ingress的配置效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 安装Ingress

Ingress 是对集群中服务的外部访问进⾏管理的 API 对象,典型的访问⽅式是 HTTP
Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟托管
通过Ingress发现pod进⾏关联。基于域名访问
通过Ingress controller实现POD负载均衡
⽀持TCP/UDP 4层负载均衡和HTTP 7层负载均衡
在这里插入图片描述

步骤:

(1)部署Ingress controller

执行下面这个文件,格式是yaml的,读者可以复制以下内容,保存格式为yaml格式的。在这里插入图片描述

apiVersion: v1
kind: Namespace
metadata:
  name: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---
kind: ConfigMap
apiVersion: v1
metadata:
  name: tcp-services
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---
kind: ConfigMap
apiVersion: v1
metadata:
  name: udp-services
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nginx-ingress-serviceaccount
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: nginx-ingress-clusterrole
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
rules:
  - apiGroups:
      - ""
    resources:
      - configmaps
      - endpoints
      - nodes
      - pods
      - secrets
    verbs:
      - list
      - watch
  - apiGroups:
      - ""
    resources:
      - nodes
    verbs:
      - get
  - apiGroups:
      - ""
    resources:
      - services
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - "extensions"
    resources:
      - ingresses
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - ""
    resources:
      - events
    verbs:
      - create
      - patch
  - apiGroups:
      - "extensions"
    resources:
      - ingresses/status
    verbs:
      - update

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
  name: nginx-ingress-role
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
rules:
  - apiGroups:
      - ""
    resources:
      - configmaps
      - pods
      - secrets
      - namespaces
    verbs:
      - get
  - apiGroups:
      - ""
    resources:
      - configmaps
    resourceNames:
      # Defaults to "<election-id>-<ingress-class>"
      # Here: "<ingress-controller-leader>-<nginx>"
      # This has to be adapted if you change either parameter
      # when launching the nginx-ingress-controller.
      - "ingress-controller-leader-nginx"
    verbs:
      - get
      - update
  - apiGroups:
      - ""
    resources:
      - configmaps
    verbs:
      - create
  - apiGroups:
      - ""
    resources:
      - endpoints
    verbs:
      - get

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
  name: nginx-ingress-role-nisa-binding
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: nginx-ingress-role
subjects:
  - kind: ServiceAccount
    name: nginx-ingress-serviceaccount
    namespace: ingress-nginx

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: nginx-ingress-clusterrole-nisa-binding
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: nginx-ingress-clusterrole
subjects:
  - kind: ServiceAccount
    name: nginx-ingress-serviceaccount
    namespace: ingress-nginx

---

apiVersion: apps/v1
kind: DaemonSet 
metadata:
  name: nginx-ingress-controller
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: ingress-nginx
      app.kubernetes.io/part-of: ingress-nginx
  template:
    metadata:
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
      annotations:
        prometheus.io/port: "10254"
        prometheus.io/scrape: "true"
    spec:
      hostNetwork: true
      serviceAccountName: nginx-ingress-serviceaccount
      containers:
        - name: nginx-ingress-controller
          image: siriuszg/nginx-ingress-controller:0.20.0
          args:
            - /nginx-ingress-controller
            - --configmap=$(POD_NAMESPACE)/nginx-configuration
            - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
            - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
            - --publish-service=$(POD_NAMESPACE)/ingress-nginx
            - --annotations-prefix=nginx.ingress.kubernetes.io
          securityContext:
            allowPrivilegeEscalation: true
            capabilities:
              drop:
                - ALL
              add:
                - NET_BIND_SERVICE
            # www-data -> 33
            runAsUser: 33
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          ports:
            - name: http
              containerPort: 80
            - name: https
              containerPort: 443
          livenessProbe:
            failureThreshold: 3
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 10
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 10

---
apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
spec:
  #type: NodePort
  ports:
  - name: http
    port: 80
    targetPort: 80
    protocol: TCP
  - name: https
    port: 443
    targetPort: 443
    protocol: TCP
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

底层还是通过Nginx实现的
将创建好的文件通过我们之前的拖拽方式,直接拖拽到k8s文件夹下,如下
在这里插入图片描述
应用刚刚上传的配置

 kubectl apply -f ingress-controller.yaml

在这里插入图片描述
查看

[root@k8s-node1 k8s]# kubectl get pods --all-namespaces

在这里插入图片描述
这⾥master节点负责调度,具体执⾏交给node2和node3来完成,能够看到它们正在下载完成了镜像,并且已经在运行了。
在上述命令后加 -o wide可以看具体执行在哪个节点下面
在node2下面可以看到节点
在这里插入图片描述
上一篇我们讲到通过yaml来配置Tomcat,这样我们可以通过host和端口直接访问到我们集群中的任意一个节点,例如
在这里插入图片描述
但是如果我们集群中该节点挂掉了,那么通过host+端口的方式 就访问不到了,这时候反向代理和负载均衡就能派上用场了。通过域名的方式就可以一举多得。

(2)创建Ingress规则

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 name: web
spec:
 rules:
 - host: tomcat6.kubenetes.com
 http:
 paths:
 - backend:
 serviceName: tomcat6
 servicePort: 80

[root@k8s-node1 k8s]# touch ingress-tomcat6.yaml
#将上⾯的规则,添加到ingress-tomcat6.yaml⽂件中
[root@k8s-node1 k8s]# vi ingress-tomcat6.yaml 
[root@k8s-node1 k8s]# kubectl apply -f ingress-tomcat6.yaml
ingress.extensions/web created
[root@k8s-node1 k8s]#

在这里插入图片描述
在这里插入图片描述
修改本机的hosts⽂件,添加如下的域名转换规则:

192.168.56.102 tomcat6.kubenetes.com

修改软件下载,SwitchHost

如果出现保存的时候说没有写入Host权限的话,可以修改一下Host文件的权限,进行写入host。记住打开SwitchHost软件的时候一定是以管理员身份打开才行。
在这里插入图片描述

在这里插入图片描述
如果不行的话,把当前用户的权限也打开一下
在这里插入图片描述

最后执行成功。
在这里插入图片描述
使用域名成功访问到了。
在这里插入图片描述
并且集群中即便有⼀个节点不可⽤,也不影响整体的运⾏。

2 kubesphere 可视化界面

默认的dashboard没啥⽤,我们⽤kubesphere可以打通全部的devops链路,kubesphere集成了很多套件,集群要求⽐较⾼
https://kubesphere.io
kuboard也很不错,集群要求不⾼
https://kuboard.cn/support/

1 简介

KubeSphere 是在 Kubernetes 之上构建的⾯向云原⽣应⽤的分布式操作系统,完全开源,⽀持多云与多集群管理,提供全栈的 IT ⾃动化运维的能⼒,简化企业的 DevOps ⼯作流。它的架构可以⾮常⽅便地使第三⽅应⽤与云原⽣⽣态组件进⾏即插即⽤ (plug-and-play) 的集成。
作为全栈的多租户容器平台,KubeSphere 提供了运维友好的向导式操作界⾯,帮助企业快速构建⼀个强⼤和功能丰富的容器云平台。KubeSphere 为⽤户提供构建企业级 Kubernetes 环境所需的多项功能,例如多云与多集群管理、Kubernetes 资源管理、DevOps、应⽤⽣命周期管理、微服务治理(服
务⽹格)、⽇志查询与收集、服务与⽹络、多租户管理、监控告警、事件与审计查询、存储管理、访问权限控制、GPU ⽀持、⽹络策略、镜像仓库管理以及安全管理等。
KubeSphere 还开源了 Kubekey 帮助企业⼀键在公有云或数据中⼼快速搭建 Kubernetes 集群,提供单节点、多节点、集群插件安装,以及集群升级与运维。
在这里插入图片描述

2、安装

对于刚接触 KubeSphere 并想快速上⼿该容器平台的⽤户,All-in-One 安装模式是最佳的选择,它能够帮助您零配置快速部署 KubeSphere 和 Kubernetes。

步骤 1:准备 Linux 机器

若要以 All-in-One 模式进⾏安装,您仅需参考以下对机器硬件和操作系统的要求准备⼀台主机。硬件推荐配置
因为电脑本身配置的原因,所以这里只在node1节点上进行安装。
在这里插入图片描述
备注
以上的系统要求和以下的说明适⽤于没有启⽤任何可选组件的默认最⼩化安装。如果您的机器⾄少有 8Core CPU 和 16 G 内存,则建议启⽤所有组件。有关更多信息,请参⻅启⽤可插拔组件

之前在前面的文档中,我们第一次安装好了节点 以后,备份了一次,现在我们要通过那个备份文件快速备份回去。
在这里插入图片描述
可以看到备份回去以后,一夜回到了解放前
在这里插入图片描述
然后现在重新配置节点,能给多大内存就给多大内存。我的电脑配置是
i7 12700H 32+512G的
不要超过那条红线的开始节点就行。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

节点要求
节点必须能够通过 SSH 连接。
节点上可以使⽤ sudo / curl / openssl 命令。
docker 可以由您⾃⼰安装或由 KubeKey 安装。
备注
如果您想离线安装 KubeSphere,请务必提前安装好 docker 。

依赖项要求
KubeKey 可以将 Kubernetes 和 KubeSphere ⼀同安装。针对不同的 Kubernetes 版本,需要安装的依赖项可能有所不同。您可以参考以下列表,查看是否需要提前在节点上安装相关的依赖项。
在这里插入图片描述
信息
KubeKey 是⽤ Go 语⾔开发的⼀款全新的安装⼯具,代替了以前基于 ansible 的安装程序。KubeKey 为⽤户提供了灵活的安装选择,可以分别安装 KubeSphere 和 Kubernetes 或⼆者同时安装,既⽅便⼜⾼效。

⽹络和 DNS 要求
必须确保 /etc/resolv.conf 中的 DNS 配置可⽤,否则集群中的 DNS 可能会有问题。
如果您的⽹络配置使⽤了防⽕墙或安全组,请确保基础设施组件可以通过特定端⼝相互通信。有关更多信息,请参⻅端⼝要求关闭防⽕墙。

提示
建议您的操作系统处于⼲净状态(不安装任何其他软件),否则可能会发⽣冲突。
如果您⽆法从 dockerhub.io 下载容器镜像,建议提前准备好容器镜像或者配置镜像加速器。有关更多信息,请参⻅为安装配置加速器。

步骤 2:下载 KubeKey

请按照以下步骤下载 KubeKey。
如果您能正常访问 GitHub/Googleapis
如果您访问 GitHub/Googleapis 受限

先执⾏以下命令以确保您从正确的区域下载 KubeKey。

export KKZONE=cn

在这里插入图片描述

执⾏以下命令下载 KubeKey

curl -sfL https://get-kk.kubesphere.io | VERSION=v1.0.1 sh -

在这里插入图片描述

备注
在您下载 KubeKey 后,如果您将其传⾄新的机器,且访问 Googleapis 同样受限,在您执⾏以下步骤之前请务必再次执⾏ export KKZONE=cn 命令。
备注
执⾏以上命令会下载最新版 KubeKey (v1.0.1),您可以修改命令中的版本号下载指定版本。
为 kk 添加可执⾏权限:

chmod +x kk
步骤 3:开始安装

在本快速⼊⻔教程中,您只需执⾏⼀个命令即可进⾏安装,其模板如下所示:

./kk create cluster [--with-kubernetes version] [--with-kubesphere version]

若要同时安装 Kubernetes 和 KubeSphere,可参考以下示例命令:

./kk create cluster --with-kubernetes v1.17.9 --with-kubesphere v3.0.0

安装的过程会比较久一点
在这里插入图片描述安装过程中出现
在这里插入图片描述
docker安装失败的原因是因为我们还没有配置docker的阿里云,需要把这个再执行一次。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
 "registry-mirrors": ["https://azk2srw0.mirror.aliyuncs.com"],
 "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

备注
⽀持的 Kubernetes 版本:v1.15.12, v1.16.13, v1.17.9 (默认), v1.18.6。
⼀般来说,对于 All-in-One 安装,您⽆需更改任何配置。
如果您在这⼀步的命令中不添加标志 --with-kubesphere ,则不会部署 KubeSphere,KubeKey将只安装 Kubernetes。如果您添加标志 --with-kubesphere 时不指定 KubeSphere 版本,则会安装最新版本的 KubeSphere。
KubeKey 会默认安装 OpenEBS 为开发和测试环境提供 LocalPV 以⽅便新⽤户。对于其他存储类型,请参⻅持久化存储配置。

步骤 4:验证安装结果

当您看到以下输出时,表明安装已经完成。
在这里插入图片描述
在这里插入图片描述
当上述容器都已经执行准备就绪的时候,执行一下命令

输⼊以下命令以检查安装结果。

kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

输出信息会显示 Web 控制台的 IP 地址和端⼝号,默认的 NodePort 是 30880 。现在,您可以使⽤默认的帐户和密码 ( admin /P@88w0rd ) 通过 EIP:30880 访问控制台。
在这里插入图片描述
上述已经安装成功了!访问的时候我们用192.68.56.200去访问
在这里插入图片描述
在这里插入图片描述

备注
您可能需要配置端⼝转发规则并在安全组中开放端⼝,以便外部⽤户访问控制台。
登录⾄控制台后,您可以在服务组件中查看各个组件的状态。如果要使⽤相关服务,您可能需要等待部分组件启动并运⾏。您也可以使⽤ kubectl get pod --all-namespaces 来检查 KubeSphere 相关组件的运⾏状况。
在这里插入图片描述
登录以后可以 去工作台改一下个人密码,规则 大小写 +数字。
平台管理下
在这里插入图片描述
集群管理 下
在这里插入图片描述
在这里插入图片描述

项目管理下:
在这里插入图片描述

工作负载下:
在这里插入图片描述
自带的kubectl 命令工具
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨里的无聊人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值