1

我正在使用 kubeadm 工具来创建一个 kubernetes v1.7 集群。

kubenode1.kube.com使用 external-ip在我的主机上公开服务“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”,但不使用 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 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)

4

1 回答 1

0

如果要在该端口上访问它,则需要在 nodeport 80 上公开 nginx 控制器。看起来您链接到的示例在端口 30080 上公开了它:https ://github.com/kubernetes/ingress/blob/master/examples/rbac/nginx/nginx-ingress-controller-service.yml

要使用端口 80,您首先必须允许 nodeport 服务使用如此低的端口号。您可以使用--service-node-port-rangeapiserver 的参数来执行此操作,请参阅https://kubernetes.io/docs/admin/kube-apiserver/

于 2017-07-10T22:00:33.917 回答