这边假设我们已经有了Kubernetes的环境,(windows下面我们可以通过 docker desktop来安装kubernetes)。 国内的腾讯云,阿里云,Azure, Google 都有 Kubernetes 服务。 (Azure Google 有一年内的免费额度。)
helm 本身也是需要安装到我们的机器里面可以通过 https://github.com/helm/helm/releases 来直接下载 (解压后扔到kubectl.exe同一个目录下)
使用这个安装的方便的地方是安装的时候我们可以通过命令行把参数直接传进去。
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm upgrade --install ingress-nginx ingress-nginx \ --repo https://kubernetes.github.io/ingress-nginx \ --namespace ingress-nginx --create-namespace
helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--create-namespace \
--set controller.service.loadBalancerIP=ip地址 \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-resource-group"=malema-test
在azure平台 如果 这个IP不是不是kubernetesr所在的resource group创建的。我们需要用 annotations来指定 resourceGrup
(腾讯云如果不想用LoadBlancer可以用这个方式 省钱, 腾讯的IP是内网的那个IP。)
helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--create-namespace \
--set controller.service.type=ClusterIP \
--set controller.service.externalIPs={"ip","ip2"} \
上面的安装好后我们可以看到一个ingress class 要记起来。 默认的情况下是nginx。
然后用 下面的命令
kubectl get service -A
可以看到类似下面的输出。81.68.82.142 这个IP就是 ingress service的IP。 NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx ingress-nginx LoadBlancer 172.16.252.119 81.68.82.142
helm uninstall ingress-nginx
当第二次安装有出错的时候可以尝试用下面的命令删除它们
kubectl delete ClusterRole ingress-nginx
kubectl get validatingwebhookconfigurations -A
# failed calling webhook "validate.nginx.ingress.kubernetes.io":
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
helm install ingress-nginx-1 ingress-nginx/ingress-nginx \
--namespace ingress-nginx-1 \
--create-namespace \
--set controller.ingressClassResource.name=nginx-one \
--set controller.ingressClassResource.controllerValue="malema.net/ingress-nginx-1" \
--set controller.ingressClassResource.enabled=true \
--set controller.ingressClassByName=true
helm install ingress-nginx-2 ingress-nginx/ingress-nginx \
--namespace ingress-nginx-2 \
--create-namespace \
--set controller.ingressClassResource.name=nginx-two \
--set controller.ingressClassResource.controllerValue="malema.net/ingress-nginx-2" \
--set controller.ingressClassResource.enabled=true \
--set controller.ingressClassByName=true
controllerValue 这个东西开头必须是域名的形式。