一次kubesphere ingress故障的解决

本文记录了在Kubesphere 3.2.1环境下,遇到ingress控制器由于镜像版本不兼容及权限问题导致无法正常工作的问题。解决方案包括升级ingresscontroller镜像至v1.1.0以解决版本兼容性,以及创建并绑定ClusterRole来赋予ingress控制器更新configmap的权限,从而修复ingress不能获取address的错误。
摘要由CSDN通过智能技术生成

一次kubesphere ingress故障的解决

前言

采用单 master 方式安装 Kubesphere 3.2.1 以后, 启动了集群 gateway, 但是 ingress 总是不能正常工作,排查了很久,终于解决问题

问题1: ingress controller 镜像版本过低,启动失败。

  • kubesphere 3.2.1 默认的 ingress controllerkubesphere/nginx-ingress-controller:v0.48.1。我在安装 kubesphere 时,选择安装的 kubernetes 1.23.0, 因此存在兼容性问题。需要修改默认的 nginx ingress controller 版本,查看 docekrhubkubesphere 的最新 nginx ingress controller 版本是 v1.1.0

  • 通过 修改 configmap ks-router-config 中的 nginx ingress controllerimage 版本号为 v1.1.0,再重启 kubersphere controller,可以解决该问题。

  • 这个地方我走了很多弯路,发现 ks-config 的配置需要在重启 kubesphere controller 才会生效。

  • kubesphere 采用 helm 方式安装额 nginx ingress controller, 但是该 helm 是包含在 kubesphere controller 镜像中,我尝试修改 helm 包的 values.yaml,替换新的镜像文件,实际上也不能生效,

问题2:ingress 不能正确获取到 address

  • 查看 nginx ingress controllerpod 日志,发现是无法完成 ingress controller 选举,提示没有权限更新 ingress-controller-leader-kubesphere-router-kubesphere-system
  • 通过增加 可以 updateconfigmapclusterrole, 绑定到 sa kubesphere-router-kubesphere-system, 问题解决。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: ingress-controller-configmap-update
rules:
- apiGroups: [""]
  resources: ["configmaps"]
  resourceNames: ["ingress-controller-leader-kubesphere-router-kubesphere-system"]
  verbs: ["update"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubesphere-router-kubesphere-system-update-configmap
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: ingress-controller-configmap-update
subjects:
- kind: ServiceAccount
  name: kubesphere-router-kubesphere-system
  namespace: kubesphere-controls-system

排查权限过程如下

################################################################################################################################

[root@ks-master ~]# kcs get clusterrolebindings |grep kubesphere-router-kubesphere-system
kubesphere-router-kubesphere-system                    ClusterRole/kubesphere-router-kubesphere-system                                    6m48s

################################################################################################################################

[root@ks-master ~]# kubectl describe clusterrolebindings kubesphere-router-kubesphere-system
Name:         kubesphere-router-kubesphere-system
Labels:       app.kubernetes.io/instance=kubesphere-router-kubesphere-system-ingress
              app.kubernetes.io/managed-by=Helm
              app.kubernetes.io/name=ingress-nginx
              app.kubernetes.io/version=0.48.1
              helm.sh/chart=ingress-nginx-3.35.0
Annotations:  meta.helm.sh/release-name: kubesphere-router-kubesphere-system-ingress
              meta.helm.sh/release-namespace: kubesphere-controls-system
              operator-sdk/primary-resource: kubesphere-controls-system/kubesphere-router-kubesphere-system-ingress
              operator-sdk/primary-resource-type: Nginx.gateway.kubesphere.io
Role:
  Kind:  ClusterRole
  Name:  kubesphere-router-kubesphere-system
Subjects:
  Kind            Name                                 Namespace
  ----            ----                                 ---------
  ServiceAccount  kubesphere-router-kubesphere-system  kubesphere-controls-system

################################################################################################################################

[root@ks-master ~]# kcs describe clusterrole kubesphere-router-kubesphere-system
Name:         kubesphere-router-kubesphere-system
Labels:       app.kubernetes.io/instance=kubesphere-router-kubesphere-system-ingress
              app.kubernetes.io/managed-by=Helm
              app.kubernetes.io/name=ingress-nginx
              app.kubernetes.io/version=0.48.1
              helm.sh/chart=ingress-nginx-3.35.0
Annotations:  meta.helm.sh/release-name: kubesphere-router-kubesphere-system-ingress
              meta.helm.sh/release-namespace: kubesphere-controls-system
              operator-sdk/primary-resource: kubesphere-controls-system/kubesphere-router-kubesphere-system-ingress
              operator-sdk/primary-resource-type: Nginx.gateway.kubesphere.io
PolicyRule:
  Resources                           Non-Resource URLs  Resource Names  Verbs
  ---------                           -----------------  --------------  -----
  events                              []                 []              [create patch]
  services                            []                 []              [get list watch]
  ingresses.extensions                []                 []              [get list watch]
  ingressclasses.networking.k8s.io    []                 []              [get list watch]
  ingresses.networking.k8s.io         []                 []              [get list watch]
  nodes                               []                 []              [list watch get]
  configmaps                          []                 []              [list watch]
  endpoints                           []                 []              [list watch]
  pods                                []                 []              [list watch]
  secrets                             []                 []              [list watch]
  ingresses.extensions/status         []                 []              [update]
  ingresses.networking.k8s.io/status  []                 []              [update]


################################################################################################################################
################################################################################################################################

[root@ks-master ~]# kcs get rolebindings 
NAME                                  ROLE                                       AGE
kubesphere-router-kubesphere-system   Role/kubesphere-router-kubesphere-system   7m50s
nginx-ingress-role-nisa-binding       Role/system:kubesphere-router-role         11d

################################################################################################################################

[root@ks-master ~]# kcs describe role kubesphere-router-kubesphere-system
Name:         kubesphere-router-kubesphere-system
Labels:       app.kubernetes.io/component=controller
              app.kubernetes.io/instance=kubesphere-router-kubesphere-system-ingress
              app.kubernetes.io/managed-by=Helm
              app.kubernetes.io/name=ingress-nginx
              app.kubernetes.io/version=0.48.1
              helm.sh/chart=ingress-nginx-3.35.0
Annotations:  meta.helm.sh/release-name: kubesphere-router-kubesphere-system-ingress
              meta.helm.sh/release-namespace: kubesphere-controls-system
PolicyRule:
  Resources                           Non-Resource URLs  Resource Names                                                         Verbs
  ---------                           -----------------  --------------                                                         -----
  events                              []                 []                                                                     [create patch]
  configmaps                          []                 []                                                                     [get list watch create]
  endpoints                           []                 []                                                                     [get list watch]
  pods                                []                 []                                                                     [get list watch]
  secrets                             []                 []                                                                     [get list watch]
  services                            []                 []                                                                     [get list watch]
  ingresses.extensions                []                 []                                                                     [get list watch]
  ingressclasses.networking.k8s.io    []                 []                                                                     [get list watch]
  ingresses.networking.k8s.io         []                 []                                                                     [get list watch]
  configmaps                          []                 [ingress-controller-leader-kubesphere-router-kubesphere-system-nginx]  [get update]
  namespaces                          []                 []                                                                     [get]
  ingresses.extensions/status         []                 []                                                                     [update]
  ingresses.networking.k8s.io/status  []                 []                                                                     [update]

################################################################################################################################

[root@ks-master ~]# kcs describe role system:kubesphere-router-role
Name:         system:kubesphere-router-role
Labels:       app.kubernetes.io/managed-by=Helm
Annotations:  kubernetes.io/created-by: kubesphere.io/ks-router
              meta.helm.sh/release-name: ks-core
              meta.helm.sh/release-namespace: kubesphere-system
PolicyRule:
  Resources   Non-Resource URLs  Resource Names                     Verbs
  ---------   -----------------  --------------                     -----
  configmaps  []                 []                                 [get create]
  configmaps  []                 [ingress-controller-leader-nginx]  [get update]
  endpoints   []                 []                                 [get]
  namespaces  []                 []                                 [get]
  pods        []                 []                                 [get]
  secrets     []                 []                                 [get]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 在Kubernetes集群中安装Ingress Controller 在Kubernetes集群中安装Ingress Controller是使用Ingress的第一步。Kubesphere推荐使用Nginx Ingress Controller, 可以使用以下命令进行安装: ``` $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/cloud/deploy.yaml ``` 这个命令会在Kubernetes集群中安装Nginx Ingress Controller。 2. 配置Ingress资源 在Kubernetes集群中安装Ingress Controller后,需要在Kubernetes中定义Ingress资源,以便Ingress Controller可以了解如何将请求路由到相应的服务。可以通过以下命令创建Ingress资源: ``` apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: test-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: test.example.com http: paths: - path: /test backend: serviceName: test-service servicePort: 80 ``` 这个Ingress资源定义将请求路由到名为test-service的服务,并将请求的路径重写为“/”。可以通过请求test.example.com/test来访问该服务。 3. 检查Ingress资源 创建Ingress资源后,可以使用以下命令检查Ingress资源是否正确启动: ``` $ kubectl get ingress ``` 这个命令将显示所有运行中的Ingress资源。 4. 测试Ingress资源 可以使用以下命令测试Ingress资源是否正确工作: ``` $ curl -H "Host: test.example.com" http://<ingress-controller-ip>/test ``` 其中,<ingress-controller-ip>是Ingress Controller的IP地址或服务名称。如果一切正常,应该看到test-service的响应。 以上是Kubesphere安装Ingress的基本步骤,您可以根据您的实际情况进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值