在裸机安装中默认不能使用Ingress,需要使用MetalLB。
Nginx docs 展示了如何设置 MetalLB 以允许您的裸机集群使用 LoadBalancer 服务。
MetalLB 为不在受支持的云提供商上运行的 Kubernetes 集群提供网络负载均衡器实现,从而有效地允许在任何集群中使用 LoadBalancer 服务。
基本上,设置很简单:
kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.3/manifests/metallb.yaml
然后创建一个ConfigMap来配置:
- 根据您的网络编辑 ip 范围
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.1.240-192.168.1.250 <= EDIT IP RANGE
检查安装输入kubectl get pods -n metallb-system,这是预期的输出:
$ kubectl get pods -n metallb-system
NAME READY STATUS RESTARTS AGE
controller-65895b47d4-6wzfr 1/1 Running 0 9d
speaker-v52xj 1/1 Running 0 9d
MetalLB安装配置后可以在nginx docs后面安装Nginx Ingress:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.29.0/deploy/static/mandatory.yaml
然后:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.29.0/deploy/static/provider/baremetal/service-nodeport.yaml
如果您愿意,可以使用Helm:
helm install my-nginx stable/nginx-ingress
如果 kubernetes 集群启用了 RBAC,则运行:
helm install my-nginx stable/nginx-ingress --set rbac.create=true
如果您使用Helm 2,则使用--name 标志指定版本名称
helm install stable/nginx-ingress --name my-nginx
或
helm install stable/nginx-ingress --name my-nginx --set rbac.create=true
检测安装的版本:
POD_NAME=$(kubectl get pods -l app.kubernetes.io/name=ingress-nginx -o jsonpath='{.items[0].metadata.name}')
kubectl exec -it $POD_NAME -- /nginx-ingress-controller --version
参考资料:
https://kubernetes.github.io/ingress-nginx/deploy/
https://metallb.universe.tf/