当前位置: 首页 > 知识库问答 >
问题:

使用nginx RBAC入口控制器公开服务的正确方法是什么?

周奇
2023-03-14

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

在我的主机上公开服务“echoheaders”非常简单。库贝。com使用外部ip

创建正在运行的部署:

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

根据以上指南,我运行命令时没有问题。。

之后,创建部署和服务“echoheader”,类型为:NodePort,但不使用外部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描述ing echoheaders

最后,我在这里尝试了kubernetes仪表板服务:https://github.com/kubernetes/dashboard/blob/master/src/deploy/kubernetes-dashboard.yaml

这与启用的库伯内特斯1.6 RBAC兼容...但我也无法从外部访问它。仍然得到相同的错误:

Curl:(7)连接kubenode1.kube.com:80失败;拒绝连接

我必须提供更多详细信息吗?我是否错过了一些东西,以便能够使用基于角色的nginx-ingress控制器公开服务?

我需要从超文本传输协议访问我的服务://kubenode1.kube.com,而不是在节点端口上公开访问(超文本传输协议://kubenode1.kube.com:31782)

共有1个答案

廉博赡
2023-03-14

如果您想在nodeport 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/

 类似资料:
  • 我基本上希望通过URL从外部访问Nginx hello页面。我已经为运行kubernetes和Nginx ingress:vps的v服务器的子域创建了一个(工作)a记录。我的域名。通用域名格式 我使用以下教程在CoreOS上通过kubeadm将Kubernetes安装为单节点集群:https://kubernetes.io/docs/setup/independent/install-kubead

  • 我有多个运行RDP应用程序的部署,它们都是通过ClusterIP服务公开的。我的k8s群集中有nginx ingress controller,为了允许tcp,我在nginx ingress controller部署中添加了tcp services configmap标志,并为其创建了configmap,如下所示 这将公开“rdp-service1”服务。我还有10个这样的服务需要在相同的端口号上

  • 我创建了一个docker镜像(java Web应用程序),创建了一个包含1个主节点和1个工作节点的kubernetes集群,创建了一个部署和一个服务。所有的资源似乎都运行良好,因为我已经通过“kubectl描述资源资源名”进行了检查。最后,我使用了入口来公开集群之外的服务。入口资源似乎工作正常,因为在描述入口对象时没有错误。但是,在从另一台机器访问浏览器上的主机时,我得到了“您的连接不是私有的”错

  • 如何使用入口控制器本身公开UI而不创建外部LoadBalancer?

  • 我有一个ACI,它运行的REST API需要公开,但需要访问vnet内的资源。 出于某种原因,与普通VM不同,如果ACI位于vnet中,则它不能具有公共IP地址。如果您尝试为其提供DNS名称,则会失败。 唯一的选择似乎是使用应用程序网关,如下所述:https://docs.microsoft.com/en-us/azure/container-instances/container-instanc

  • null 现在的问题是: > 作为控制器方法执行的结果,我将返回对象的映射,该映射将解析为JSON。可能的实体是: {“结果”:“12”} 我应该如何提供基于结果的附加消息?我能想到两个解决办法: > 返回映射,该映射在肯定验证结果的情况下具有result=true,在否定验证结果的情况下具有result=false,以及带有相应消息的errorCode 返回指示验证结果的布尔值,并另外对否定结果