关于阿里云:阿里云ACK创建Ingress失败解决心得

前言

最近在应用阿里云K8s ACK创立集群,并公布前后台利用,在应用过程中创立无状态利用和SVC都没问题,但当创立Ingress时报错,于是分割客服小哥一起终于把问题解决了,当初记录下来分享给大家。

创立Ingress失败

下图就是我通过页面创立Ingress时报的错

谬误详情:APISERVER_500

Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post https://ingress-nginx-controller-admission.kube-system.svc:443/networking/v1beta1/ingresses?timeout=10s: dial tcp 172.20.0.42:8443: connect: connection refused

API: /apiProxy/mirana/cn-hangzhou/cc836d2047d1d46738b1f17101831239c/apis/extensions/v1beta1/namespaces/default/ingresses.json

RequestID: 23424e0a-6a54-45a6-a1d5-faa3c5124189

1、而后发动工单问询客服小哥,接着小哥让我更新下nginx-ingress-controller组件,如图所示

从0.33降级到0.44,然而发现始终降级不胜利!

2、接着,客服小哥又给了我一个解决方案,就是删除nginx-ingress-controller再从新新建。

kubectl get get svc -n kube-system nginx-ingress-lb
kubectl delete deployment nginx-ingress-controller -n kube-system 
kubectl apply -f nginx-ingress-controller.yaml

nginx-ingress-controller.yaml:

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"     ##  intranet是私网   internet是公网
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "your-slb-id"   ##  替换为slb id
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"  ##  强制笼罩已有监听
  labels:
    app: nginx-ingress-lb
  name: nginx-ingress-lb
  namespace: kube-system
spec:
  externalTrafficPolicy: Local
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 80
    - name: https
      port: 443
      protocol: TCP
      targetPort: 443
  selector:
    app: ingress-nginx
  sessionAffinity: None
  type: LoadBalancer

当我删除nginx-ingress-controller时发现ACK主动创立的SLB也一并删除了,而后应用小哥发的nginx-ingress-controller.yaml文件创建了新的nginx-ingress-controller service,外面的slb id要替换成你本人的实在SLB id(从新创立个SLB吧)。

当初创立胜利之后,我发现创立ingress还是报一开始的错,而且降级nginx-ingress-controller组件也不胜利,也就是说并没起到作用!

3、而后我本人通过ACK控制台事件一栏发现如下的错

0/2 nodes are available: 2 node(s) didn't match pod affinity/anti-affinity, 2 node(s) didn't satisfy existing pods anti-affinity rules.

而后提供给客服小哥,小哥给了我一个解决方案:ingress-controller的正本缩容为0,再设置成2,如下所示:

kubectl -n kube-system scale --replicas=0 deployment/nginx-ingress-controller
kubectl -n kube-system scale --replicas=2 deployment/nginx-ingress-controller

通过上述的两个命令,发现不论是创立ingress还是降级nginx-ingress-controller都胜利了,可喜可贺!

总结

阿里云创立ACK的时候会主动创立nginx-ingress-controller的SLB和API Server的SLB

留神

只有通过删除nginx-ingress-controller能力删除对应的SLB

援用

Kubernetes Ingress Controller 高牢靠部署最佳实际
【Kubernetes】Pod学习(八)Pod调度:定向调度与亲和性调度
K8S 创立 Service

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理