0. github 地址 controller-v0.41.2
https://github.com/kubernetes/ingress-nginx/blob/controller-v0.41.2/deploy/static/provider/do/deploy.yaml
文件重命名->ingress-nginx-controller.yaml
1. 修改镜像
k8s.gcr.io/ingress-nginx/controller:v0.41.2@sha256:1f4f402b9c14f3ae92b11ada1dfe9893a88f0faeb0b2f4b903e2c67a0c3bf0de
## 替换成
registry.cn-beijing.aliyuncs.com/lingshiedu/ingress-nginx-controller:0.41.2
## 因为k8s.gcr.io的镜像国内没法下载,所以替换成阿里云的镜像
2. 创建Ingress-Controller
kubectl create -f ingress-nginx-controller.yaml
3. 安装Metallb
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml
# On first install only
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
说明:为啥要安装metallb?
答案:默认的ingress-controller配置的是Loadbalance模式,而Service后端的Pod是随机分配在Worker节点的,所以需要一个前置的loadbalance将流量转发到后端的ingress-controller,如果是在Cloud环境中部署,可以使用云厂商提供的负载均衡服务替代MetalLb。 此外还可以用NodePort模式,会将Ingress-Controller对应的Service的端口映射到master节点的端口上,然后通过masterip:port的形式访问
参考 https://kubernetes.github.io/ingress-nginx/deploy/baremetal/
4. 添加ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.10.150-192.168.10.155
addresses:是一个可用的ip地址范围,和master(192.168.10.144)节点在一个IP段内
5. 确认Ingress-nginx的external ip
kubectl -n ingress-nginx get svc
# 输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.108.29.249 192.168.10.150 80:30232/TCP,443:30452/TCP 16h
ingress-nginx-controller-admission ClusterIP 10.108.47.162 <none> 443/TCP 16h
192.168.10.150 即Metallb的集群地址,后续将我们需要使用的域名解析到该地址即可
安装了Ingress之后,我们已经打通了Pod->集群外客户端的通道,接下来就可以部署自己的应用了。如果没有具体的应用,可以参考Dashboard的部署。