我正在使用kubeadm工具,以创建一个kubernetes v1.7集群 .
使用external-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'
从您的Web浏览器访问它:
http://kubenode1.kube.com
现在,我想使用本指南中基于角色的入口控制器公开相同的服务 echoheaders
:https://github.com/kubernetes/ingress/tree/master/examples/rbac/nginx
从上面的指南我运行命令没有问题..
之后,使用类型:NodePort创建部署和服务“echoheader”,但不使用external-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"
回报
curl: (7) Failed connect to kubenode1.kube.com:80; Connection Refused
当我检查命令时,一切似乎都没问题:kubectl描述echoheaders
最后我从这里尝试了kubernetes-dashboard服务:https://github.com/kubernetes/dashboard/blob/master/src/deploy/kubernetes-dashboard.yaml
这与Kubernetes 1.6 RBAC兼容兼容..但我也无法从外部访问它 . 仍然得到相同的错误:
卷曲:(7)连接到kubenode1.kube.com:80失败;拒绝连接
我需要提供更多细节吗?我是否遗漏了一些东西,以便能够使用基于角色的nginx-ingress控制器公开服务?
我需要从http(s)://kubenode1.kube.com访问我的服务,而不能在Nodeport端口上公开访问(http(s)://kubenode1.kube.com:31782)
1 回答
如果要在该端口上访问nginx控制器,则需要在nodeport 80上公开nginx控制器 . 它看起来像您链接的示例在端口30080上公开它:https://github.com/kubernetes/ingress/blob/master/examples/rbac/nginx/nginx-ingress-controller-service.yml
要使用端口80,首先必须为节点端口服务提供如此低的端口号 . 您可以使用apiserver的
--service-node-port-range
参数执行此操作,请参阅https://kubernetes.io/docs/admin/kube-apiserver/