共计 2280 个字符,预计需要花费 6 分钟才能阅读完成。
前言
最近在应用阿里云 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