欢迎大家进群,一起探讨学习
微信公众号,每天给大家提供技术干货
博主技术笔记 https://notes.xiyankt.com
博主开源微服架构前后端分离技术博客项目源码地址,欢迎各位star https://gitee.com/bright-boy/xiyan-blog
版本: k8s 1.25.2部署 ingress-nginx1.3.1
1.下载
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.3.1/deploy/static/provider/cloud/deploy.yaml
2.处理国内无法下载k8s.io上的镜像
crictl pull registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.3.1
crictl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.3.0
sed -i s#registry.k8s.io/ingress-nginx/controller:v1.3.1@sha256:54f7fe2c6c5a9db9a0ebf1131797109bb7a4d91f56b9b362bde2abd237dd1974#registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.3.1#g deploy.yaml
sed -i s#registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.3.0@sha256:549e71a6ca248c5abd51cdb73dbc3083df62cf92ed5e6147c780e30f7e007a47#registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.3.0#g deploy.yaml
ERRO[0000] unable to determine image API version: rpc error: code = Unavailable desc = connection error: desc = “transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or directory” 错误解决
crictl config runtime-endpoint unix:///run/containerd/containerd.sock
crictl config image-endpoint unix:///run/containerd/containerd.sock
3.可以通过nodeSelector确定将ingress-nginx-controller部署在那些机器上(默认上所有的带有kubernetes.io/os: linux标签的node节点 没有特殊要求可以忽略
)
root@k8s-master1:~/ingress# kubectl label nodes k8s-node1 hasIngress=true
node/k8s-node1 labeled
root@k8s-master1:~/ingress# kubectl label nodes k8s-node2 hasIngress=true
node/k8s-node2 labeled
root@k8s-master1:~/ingress#
4.修改配置
修改三个地方
1.HostNetwork
是为了打通Cluster和node的网络,让Cluster直接监听node的端口,一般是80和443,不用再通过随机绑定的nodePort来访问集群服务
可以看到不再需要随机绑定的nodePort了,因为hostNetwork直接监听集群的80端口。
2.nodeSelector (默认上所有的带有kubernetes.io/os: linux标签的node节点 没有特殊要求可以忽略
)
主要是为了能够选择将ingress-nginx-controller部署到那个机器上
3.DaemonSet
因为Deployment可能会把多个pod调度到同一个node,那就失去高可用的意义了。而DaemonSet在一个节点上只会有一个Pod,符合我们的要求。
考虑到单点故障问题,我们可以采取多节点的方式进行部署。 首先我们修改deploy.yaml文件中的类型,注释掉部署数量,并去掉我们的mynginx: "true"标签(因为每个节点都有kubernetes.io/os: linux)。
修改deploy.yaml
5.执行
kubectl apply -f deploy.yaml
测试
kubectl get pod,svc,ing,deploy -n ingress-nginx
kubectl create ns test
kubectl create deploy nginx --image=nginx:1.17.1 --replicas=1 -n test
kubectl expose deploy nginx --port=80 -n test
kubectl get pod,svc,ing,deploy -n test
编写 ingress-nginx-test.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-nginx-test
namespace: test
spec:
rules:
- host: k8s.frp.innomcn.com
http:
paths:
- backend:
service:
name: nginx
port:
number: 80
path: /
pathType: Prefix
执行
kubectl apply -f ingress-nginx-test.yaml
访问域名 注意点,ingress部署到哪台node上你就只能配置域名指向那台服务器的ip,如果你配置的域名指向master会访问不了
参考博客
https://blog.csdn.net/weixin_43501172/article/details/126016524