使用 nginx 入口控制器的 minikube Kubernetes 集群上没有入口地址
Posted
技术标签:
【中文标题】使用 nginx 入口控制器的 minikube Kubernetes 集群上没有入口地址【英文标题】:No ingress address on minikube Kubernetes cluster with nginx ingress controller 【发布时间】:2018-07-09 10:45:35 【问题描述】:我有以下内容:
ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: abcxyz
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: abcxyz
http:
paths:
- path: /a/
backend:
serviceName: service-a
servicePort: 80
- path: /b/
backend:
serviceName: service-b
servicePort: 80
kubectl describe ingress abcxyz
的输出:
Name: abcxyz
Namespace: default
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
abcxyz
/a/ service-a:80 (<none>)
/b/ service-b:80 (<none>)
Annotations:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CREATE 16m nginx-ingress-controller Ingress default/abcxyz
Normal UPDATE 12m (x2 over 15m) nginx-ingress-controller Ingress default/abcxyz
为什么地址是空的?我已经使用 helm install stable/nginx-ingress
通过 helm 安装了“nginx 入口控制器”-所有相关的 pod 似乎都运行良好。
如何提供对 ingress 的访问权限?
【问题讨论】:
主机名 abcxyz 是否解析为实际的 IP 地址? 不,它没有,它应该指向什么IP? 到nginx-ingress-controller的静态ip。它应该是 LoadBalancer 类型的服务。所以主机名应该指向负载均衡器的前面。 因为 minikube 将主机名指向您的 minikube 集群,如果您使用的是 nix 系统,请在 /etc/hosts 中添加一个条目。 【参考方案1】:我的解决方案是:
minikube addons enable ingress
【讨论】:
【参考方案2】:类型
minikube ip
检索主 IP。例如:
bash-3.2$ minikube ip
192.168.1.100
提供 Kubernetes 集群信息的命令是:
bash-3.2$ kubectl cluster-info
Kubernetes master is running at https://192.168.1.100:8443
KubeDNS is running at https://192.168.1.100:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
您可以使用curl
从主机测试入口控制器:
bash-3.2$ curl http://192.168.1.100:80
default backend - 404
最后,添加一个主机条目,以便能够使用名称来引用集群 IP 地址
在/etc/hosts
中添加:
192.168.1.100 abcxyz
【讨论】:
【参考方案3】:https://helm.nginx.com/stable
中似乎存在一个错误,导致它无法绑定到 minikube 中的地址。
对我有用的解决方案是改用https://kubernetes.github.io/ingress-nginx
NGINX ingress 的 kubernetes 版本的安装说明在这里:https://kubernetes.github.io/ingress-nginx/deploy/,但这里是要点:
头盔
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx
Minikube
minikube addons enable ingress
microk8s
microk8s enable ingress
还要注意,"bare metal" installation instructions 使用 NodePort。但大多数 IaaS 提供商都有自己分配 IP 的方式,因此他们为每个提供商都有特定的instructions。
# Source: ingress-nginx/templates/controller-service.yaml
apiVersion: v1
kind: Service
metadata:
annotations:
labels:
helm.sh/chart: ingress-nginx-3.33.0
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/version: 0.47.0
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: controller
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
- name: https
port: 443
protocol: TCP
targetPort: https
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/component: controller
【讨论】:
以上是关于使用 nginx 入口控制器的 minikube Kubernetes 集群上没有入口地址的主要内容,如果未能解决你的问题,请参考以下文章