使用 nginx RBAC 入口控制器公开服务的正确方法是什么?
Which is the proper way to expose a service using the nginx RBAC ingress controller?
我正在使用 kubeadm 工具来创建 kubernetes v1.7 集群。
使用外部 IP
在我的主机 kubenode1.kube.com
上公开服务 "echoheaders" 非常简单
创建部署运行:
kubectl run echoheaders --image=gcr.io/google_containers/echoserver:1.5
从部署公开服务:
kubectl expose deployment echoheaders --port=80 --target-port=8080 --external-ip='192.168.10.96'
从您的网络浏览器访问它:
http://kubenode1.kube.com
现在,我想使用本指南中的基于角色的入口控制器公开相同的服务 echoheaders
:
https://github.com/kubernetes/ingress/tree/master/examples/rbac/nginx
根据上面的指南,我 运行 命令没有问题..
之后,使用 type:NodePort 创建部署和服务 "echoheader" 但不使用外部 IP 选项
kubectl run echoheaders --image=gcr.io/google_containers/echoserver:1.5
kubectl expose deployment echoheaders --port=80 --target-port=8080 --type=NodePort
我们可以通过 curl 192.168.10.96:31782
访问该服务
同时为此服务创建 echoheaders 入口资源:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: echoheaders-ingress
spec:
rules:
- host: kubenode1.kube.com
http:
paths:
- path: /
backend:
serviceName: echoheaders
servicePort: 80
但我无法访问该服务:
curl http(s)://kubenode1.kube.com -H "Host: kubenode1.kube.com"
returns
curl: (7) Failed connect to kubenode1.kube.com:80; Connection Refused
检查命令时似乎一切正常:
kubectl describe ing echoheaders
最后我从这里尝试了 kubernetes-dashboard 服务:
https://github.com/kubernetes/dashboard/blob/master/src/deploy/kubernetes-dashboard.yaml
这兼容启用了 Kubernetes 1.6 RBAC 的 .. 但我也无法从外部访问它。
仍然出现相同的错误:
curl: (7) 连接到 kubenode1.kube.com:80 失败;连接被拒绝
我必须提供更多详细信息吗?
我是否遗漏了一些东西以便能够使用基于角色的 nginx-ingress 控制器公开服务?
我需要从 http(s)://kubenode1.kube.com 访问我的服务,而不是在 Nodeport 端口 (http(s)://kubenode1.kube.com:31782) 上公开访问
如果要在该端口上访问它,则需要在节点端口 80 上公开 nginx 控制器。看起来您链接到的示例在端口 30080 上公开了它:https://github.com/kubernetes/ingress/blob/master/examples/rbac/nginx/nginx-ingress-controller-service.yml
要使用端口 80,您首先必须为 nodeport 服务允许如此低的端口号。您可以使用 apiserver 的 --service-node-port-range
参数来执行此操作,请参阅 https://kubernetes.io/docs/admin/kube-apiserver/
我正在使用 kubeadm 工具来创建 kubernetes v1.7 集群。
使用外部 IP
在我的主机kubenode1.kube.com
上公开服务 "echoheaders" 非常简单
创建部署运行:
kubectl run echoheaders --image=gcr.io/google_containers/echoserver:1.5
从部署公开服务:
kubectl expose deployment echoheaders --port=80 --target-port=8080 --external-ip='192.168.10.96'
从您的网络浏览器访问它:
http://kubenode1.kube.com
现在,我想使用本指南中的基于角色的入口控制器公开相同的服务 echoheaders
:
https://github.com/kubernetes/ingress/tree/master/examples/rbac/nginx
根据上面的指南,我 运行 命令没有问题..
之后,使用 type:NodePort 创建部署和服务 "echoheader" 但不使用外部 IP 选项
kubectl run echoheaders --image=gcr.io/google_containers/echoserver:1.5
kubectl expose deployment echoheaders --port=80 --target-port=8080 --type=NodePort
我们可以通过 curl 192.168.10.96:31782
同时为此服务创建 echoheaders 入口资源:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: echoheaders-ingress
spec:
rules:
- host: kubenode1.kube.com
http:
paths:
- path: /
backend:
serviceName: echoheaders
servicePort: 80
但我无法访问该服务:
curl http(s)://kubenode1.kube.com -H "Host: kubenode1.kube.com"
returns
curl: (7) Failed connect to kubenode1.kube.com:80; Connection Refused
检查命令时似乎一切正常: kubectl describe ing echoheaders
最后我从这里尝试了 kubernetes-dashboard 服务: https://github.com/kubernetes/dashboard/blob/master/src/deploy/kubernetes-dashboard.yaml
这兼容启用了 Kubernetes 1.6 RBAC 的 .. 但我也无法从外部访问它。 仍然出现相同的错误:
curl: (7) 连接到 kubenode1.kube.com:80 失败;连接被拒绝
我必须提供更多详细信息吗? 我是否遗漏了一些东西以便能够使用基于角色的 nginx-ingress 控制器公开服务?
我需要从 http(s)://kubenode1.kube.com 访问我的服务,而不是在 Nodeport 端口 (http(s)://kubenode1.kube.com:31782) 上公开访问
如果要在该端口上访问它,则需要在节点端口 80 上公开 nginx 控制器。看起来您链接到的示例在端口 30080 上公开了它:https://github.com/kubernetes/ingress/blob/master/examples/rbac/nginx/nginx-ingress-controller-service.yml
要使用端口 80,您首先必须为 nodeport 服务允许如此低的端口号。您可以使用 apiserver 的 --service-node-port-range
参数来执行此操作,请参阅 https://kubernetes.io/docs/admin/kube-apiserver/