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

试图在库伯内特斯裸机上使用nginx-ingress-控制器公开普通TCP

万俟棋
2023-03-14

我目前正在学习kubernetes基础,我想在我的cluser之外公开一个mongob。我已经设置了我的nginx入口控制器并遵循此文档以公开普通的TCP连接。

这是我的入口服务配置:

apiVersion: v1
kind: Service
metadata:
  annotations:
  labels:
    helm.sh/chart: ingress-nginx-4.0.15
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/version: 1.1.1
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  type: NodePort
  ipFamilyPolicy: SingleStack
  externalIPs:
  - 172.30.63.51
  ipFamilies:
    - IPv4
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
      appProtocol: http
    - name: https
      port: 443
      protocol: TCP
      targetPort: https
      appProtocol: https
    - name: proxied-tcp-27017
      port: 27017
      protocol: TCP
      targetPort: 27017
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/component: controller

configmap到代理TCP连接:

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  27017: "global-stack/global-stack-mongo-svc:27017"

我的入口控制器在端口80和443上运行良好,可以公开我的服务,但无法访问端口27017

kubectl get svc-n ingress nginx的结果:

NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP    PORT(S)                                
ingress-nginx-controller             NodePort    10.97.149.93    172.30.63.51   80:30159/TCP,443:32585/TCP,27017:30098/TCP
ingress-nginx-controller-admission   ClusterIP   10.107.33.165   <none>         443/TCP                                  

外部IP很好地响应卷曲172.30.63.51:80

<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

但无法响应端口27017:

curl: (7) Failed to connect to 172.30.63.51 port 27017: Connection refused

我的mongo服务:

apiVersion: v1
kind: Service
metadata:
  name: global-stack-mongo-svc
  namespace: global-stack
  labels:
    app: global-stack-mongo-app
spec:
  type: ClusterIP
  ports:
  - name: http
    port: 27017
    protocol: TCP
    targetPort: 27017
  selector:    
    app: global-stack-mongo-app

服务集群IP为10.244.1.57,响应良好

>> curl 10.244.1.57:27017

It looks like you are trying to access MongoDB over HTTP on the native driver port.

如果有人能帮助我,我将非常感激。谢谢

圭姆。

共有1个答案

公沈义
2023-03-14

经过一些研究,我解决了我的问题。

nginx ingress文档中未对其进行描述,但您需要使用ingress controller容器将TCP配置映射映射到部署文件中,其中包含以下行:

  args:
    - /nginx-ingress-controller
    - --election-id=ingress-controller-leader
    - --controller-class=k8s.io/ingress-nginx
    - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
    - --validating-webhook=:8443
    - --validating-webhook-certificate=/usr/local/certificates/cert
    - --validating-webhook-key=/usr/local/certificates/key
    - --tcp-services-configmap=ingress-nginx/tcp-services
 类似资料:
  • 我在AKS上部署了Kubernetes 1.8.7集群。我正在尝试使用帮助安装NGINX入口控制器(helm install stable/NGINX入口——名称空间kube系统)。I init helm使用helm init——服务帐户默认值。我遇到以下错误 错误:release my release失败:clusterroles.rbac.authorization.k8s。io“my rel

  • 具体来说,当我按照谷歌网站上的指示在GKE上设置nginx ingress时,为什么最终会有两个外部IP地址? 这两个IP地址用于LoadBalancer类型的入口资源和服务资源: 以下是我的想法: 这基本上就是我链接到的教程页面上的图表。因此,我希望负载平衡器是L4类型的,并且有一个外部IP(并且不需要花费任何金钱来使用!)。我希望入口(尽管其名称)没有外部IP,因为我用注释标记了它 谷歌应该承

  • 我在K8S集群中面临一个奇怪的问题 基本上我有两个应用程序: identity manager(基于WSO2,但该问题与WSO2无关) 将管理X509身份验证的外部SAML2 IDP 为了使用这个外部SAML2 IDP,我配置了WSO2 当我尝试通过X509登录时,WSO2显示登录页面,我单击智能卡,重定向到外部SAML IDP。 在这种情况下,nginx入口为我提供了502个坏网关。如果我复制U

  • 我使用的是Kubernetes引擎,我有多个nginx入口控制器,它们的公共IP一直在变化。 我不能在生产中使用它,因为这不是正确的行为。 这正常吗?有人能帮我吗?

  • 我已经研究Kubernetes几个星期了,并使用kube lego NGINX示例(https://github.com/jetstack/kube-lego)已使用DigitalOcean上的Rancher成功地将服务部署到Kubernetes群集。 我已经部署了示例静态站点、Wordpress、Laravel、Craft CMS等。所有这些都使用自定义命名空间、部署、秘密、具有外部注册表的容器

  • 我试图更改client\u max\u body\u size值,因此我的nginx入口不会返回413错误。 我测试了一些解决方案。 这是我的测试配置图: 这些更改根本没有效果,加载后,在nginx控制器日志中,我可以看到有关重新加载配置映射的信息,但可以看到nginx中的值。形态相同: 我的nginx控制器配置使用以下图像:quay.io/kubernetes-ingres-controller