ingress-nginx部署
ingress介绍
在kubernetes中,POD,SVC的IP地址只能集群内部使用,集群外部是无法访问的。
为了能让外部的应用访问进来,kubernetes提供了如下几种方案:
- NodePort
- LoadBalancer
- Ingress
ingress工作原理
- 本质:7层http/https代理
- ingress controller通过和kubernetes apiserver交互,动态的获取集群中的ingress规则
- 解析ingress规则,生成proxy服务的配置,比如nginx配置
- 再写到ingress proxy的pod中,如果pod运行的是nginx服务,就生成nginx配置,并放到/etc/nginx/nginx.conf中
- 然后reload服务
ingress解决那些问题?
- 通过yaml配置动态配置ingress服务
- 减少不必要的端口暴露
- 卸载https,让集群内部用http
ingress当前的实现方式
官网文档:https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/
本次使用基于nginx的ingress
github地址:https://github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0
部署Ingress-nginx
部署文件介绍,准备
deploy的yaml
项目官网deploy方式部署的yaml配置地址:https://github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0/deploy/static
configmap.yaml 存储配置信息,key/value值
namespace.yaml 建命名空间
mandatory.yaml 包含部署deploy相关所有资源(configmap.yaml,namespace.yaml,rbac.yaml,with-rbac.yaml)
rbac.yaml rbac授权配置,创建Ingress需要使用的ServiceAccount,ClusterRole,Role,RoleBinding,ClusterRoleBinding
with-rbac.yaml 能使用rbac授权的deploy配置,用于构建ingress-controller
service的yaml
自建集群用:
图片.png
公有云上用:
图片.png
亚马孙云上用:
图片.png
国外源改为国内源
修改mandatory.yaml或者with-rbac.yaml里面的image地址,避免原地址镜像拉取超时
镜像国外源地址 | 版本号 | 镜像国内源地址 |
---|---|---|
quay.io/kubernetes-ingress-controller/nginx-ingress-controller | 0.30.0 | quay.azk8s.cn/kubernetes-ingress-controller/nginx-ingress-controller |
部署
自建集群部署
wget https://github.com/kubernetes/ingress-nginx/blob/nginx-0.30.0/deploy/static/mandatory.yaml
sed -i 's/quay.io/quay.azk8s.cn/' mandatory.yaml
kubectl apply -f mandatory.yaml
kubectl apply -f https://github.com/kubernetes/ingress-nginx/blob/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
验证
查看deploy
[root@nw61 nginx-ingress]# kubectl -n ingress-nginx get pods
NAME READY STATUS RESTARTS AGE
nginx-ingress-controller-55c9df84c6-8x4kk 1/1 Running 0 18h
查看pod详情
kubectl -n ingress-nginx describe pod nginx-ingress-controller-55c9df84c6-8x4kk
查看svc
[root@nw61 nginx-ingress]# kubectl -n ingress-nginx get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx NodePort 10.107.133.174 <none> 80:30708/TCP,443:31055/TCP 18h
访问测试
[root@nw61 nginx-ingress]# curl http://10.107.133.174/
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.17.8</center>
</body>
</html>
[root@nw61 nginx-ingress]# ping 10.107.133.174
PING 10.107.133.174 (10.107.133.174) 56(84) bytes of data.
64 bytes from 10.107.133.174: icmp_seq=1 ttl=64 time=0.063 ms
64 bytes from 10.107.133.174: icmp_seq=2 ttl=64 time=0.044 ms