本文仅仅记录如何在minikube下启用ingress-nginx 这个ingress controller,并通过该这个方式暴露k8s的dashboard支持域名访问,虽然生产环境没有什么具体的作用,仅供学习k8s使用。
安装ingress-nginx其实是一个很简单的事情,通过
minikube addons enable ingress
但是由于中众所周知周知的原因,k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1 k8s.gcr.io/ingress-nginx/controller:v1.0.4 这两个镜像在国内无法下载到,这就会导致启动失败。
kubctrl get pod -A
可以看到有三个相关pod
ingress-nginx-admission-create--1-8v79c
ingress-nginx-admission-patch--1-ll9qs
ingress-nginx-controller-5f66978484-mmn74
由于镜像的加载失败而编排失败。ingress-nginx-controller-5f66978484-mmn74 是由ingress-nginx-controller 这个deployment 编排部署的,我们可以通过
kubctrl edit deployment ingress-nginx-controller
将镜像修改到可以拉到镜像,但是其实这样是不能成功的,因为ingress-nginx-admission-create--1-8v79c ingress-nginx-admission-patch--1-ll9qs 这两个pod需要被创建后才能使得ingress-nginx-controller-5f66978484-mmn74 的编排成功而ingress-nginx-admission 是通过job.batch/ingress-nginx-admission-create 这个job create的,由于job的image字段是不可以修改的。因此这是不可以的。
那自然想到通过
minikube image load
来做,事先通过科学上网docker pull到k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1 k8s.gcr.io/ingress-nginx/controller:v1.0.4 后,docker save到文件,下载后导入。
本以为可以成功,事实上导入是没有问题,但是当重新enable addons 后依旧会尝试去拉去k8s.gcr.io/ingress-nginx/controller:v1.0.4 等镜像并比较hash,还是失败,看来只有对minikube设置代理了
minikube ssh
进入后其实minikube内的docker,问题也就转变为docker 的代理设置,根据官方文档,以下做法可以达成目的
sudo mkdir -p /etc/systemd/system/docker.service.d
vi /etc/systemd/system/docker.service.d/http-proxy.conf
输入如下内容
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80"
Environment="HTTPS_PROXY=https://proxy.example.com:443"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
如此后,docker pull可以正常拉到k8s.gcr.io/ingress-nginx/controller:v1.0.4
那如何证明成功呢?首先再次运行
minikube addons enable ingress
后编写如下ingress用于暴露k8s dashboard
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
rules:
- host: dashboard.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: kubernetes-dashboard
port:
number: 80
后通过
minikube servcie list
#可以看到 ingress-nginx 被绑定在一个ip地址上,如
ingress-nginx | ingress-nginx-controller | http/80 | http://192.168.52.6:32162 |
| | | https/443 | http://192.168.52.6:30106
只要将 dashboard.com 通过/etc/hosts 制定为192.168.52.6就可以通过浏览器 访问dashboard.com打开k8s dashboard
本文为Lokie.Wang原创文章,转载无需和我联系,但请注明来自lokie博客http://lokie.wang