最近在使用阿里云K8s ACK创建集群,并发布前后台应用,在使用过程中创建无状态应用和SVC都没问题,但当创建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
Pod 使用 pod 亲和性 的示例
Kubernetes Ingress Controller 高可靠部署最佳实践
【Kubernetes】Pod学习(八)Pod调度:定向调度与亲和性调度
K8S 创建 Service
An Lock Free ID Generator for Golang implementation View on GitHub . Snowfl...
前言 在上一篇文章中我为大家介绍了Simpe项目的一些 背景知识 以及如何使用 有限...
记录下一个疑问,最近在重新看canvas做点Demo这样,时间是写在2019年11月5日,以...
一、概述 上一篇文章介绍了 使用 docker 部署 spring boot 并接入 skywalking ,...
研发背景,解决什么问题 点击约束:某个按钮触发一次点击后,待接口调用有结果都...
先看效果: 实现: 1.定义导航栏的文字标签: div class=tou sapn class=logo 北...
使用Dreamweaver设计了一个个人简历,想要给简历添加自己的照片,该怎么添加并排...
再次感谢大家对 Flutter Engage China 活动 的关注和积极参与!我们在活动前后收...
Dreamweaver中想要给文字中的个别文字添加背景色,该怎么添加呢?下面我们就来看...
事件的防抖和节流 防抖和节流函数是我们经常用到的函数,在实际的开发过程中,如...