业务需求:几个服务从某公有云环境迁移到另一个公有云环境,分为三个步骤

  1. 在新的公有云环境中发布 svc 和 deploy,configmap,secret
  2. 在新的公有云环境中发布 ingress,发布完成后,绑定 hosts 进行测试
  3. 在第二步测试访问无异常后,解析域名到新的公有云的 k8s 的负载均衡器上

由于我们的这几个业务没有承接线上流量,开发人员先解析了域名,然后再部署的 ingress,在新部署 ingress 的过程中,发生了下面的错误,联系我解决,故,记录下来,也方便开发人员查看

错误1:ingress 配置错误

原理:流量从 ingress 到 svc,所以 ingress 中 Path 配置的 svc name 和端口,必须和 kubectl get svc -n ued 中获取的一致

解决办法:查看 svc 地址和端口,修改 ingress

> kubectl describe ingress -n ued multi-screen-manager-ingress
Name:             multi-screen-manager-ingress
Namespace:        ued
Address:          
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host                   Path  Backends
  ----                   ----  --------
  multi-screen.test.cn           # 此处配置的 svc 名称和端口,必须和 kubectl get svc multi-screens-service -n ued 获取的一致,
                                  # 所以此处也要改成 multi-screens-service:8080
                         /admin   multi-screens-service:80 (<none>)  
Annotations:
......

Events:  <none>
> kubectl get svc multi-screens-service -n ued
NAME                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
multi-screens-service   ClusterIP   10.2.233.190   <none>        8080/TCP   116m

错误2:svc 配置错误

现象:上面 ingress 和 svc 配置成功后,开发反馈服务访问 404

其实上面的 ingress 检查还忽略了一个细节,即,没有 ep 地址

Rules:
  Host                   Path  Backends
  ----                   ----  --------
  multi-screen.test.cn           # 没有 ep 地址,显示 <none>
                         /admin   multi-screens-service:80 (<none>)  

使用 kuebctl 命令查看,也显示 <none>

> kubectl get ep -n ued multi-screens-service
NAME                    ENDPOINTS   AGE
multi-screens-service   <none>      116m
> 

这一般都是 svc 和 pod(deploy)之间的配置问题,基本都是标签选择器不匹配的问题

查看 svc(multi-screens-service )的 yaml 文件,发现 svc 定义的标签选择器是app: multi-screens-service

yaml 文件如下:

selector:                        # 标签选择器
    app: multi-screens-service   # 标签 key 和 values

根据 svc 查看 pod,发现 pod 定义的标签和 svc 中标签选择器的定义无法匹配,所以请求无法转发到 pod 上

> kubectl get pod -n ued |grep multi-screens
multi-screens-7cf854f9bd-zvj28                          1/1     Running            0          17m
multi-screens-test-8484f78c5d-4wcn8                     1/1     Running            0          17m
> kubectl get pod -n ued --show-labels|grep multi-screens
multi-screens-7cf854f9bd-zvj28                          1/1     Running            0          17m     app=multi-screens,owner=mhhe,pod-template-hash=7cf854f9bd,projectname=multi-screens
multi-screens-test-8484f78c5d-4wcn8                     1/1     Running            0          17m     app=multi-screens-test,owner=mhhe,pod-template-hash=8484f78c5d,projectname=multi-screens-test
> 

解决办法:修改 svc 中标签选择器的值 (values),或者修改 pod 的标签

svc 中标签选择器的正确写法:

selector:                # 标签选择器
    app: multi-screens   # 标签 key 和 values
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐