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

在库伯内特斯的集群外使用nginx-入口暴露TCP端口

沈国安
2023-03-14

所以我已经使用库伯内特斯在Google云上设置了我的应用程序。我有一个Pod,我想从需要TCP请求的集群中公开它。

我通过ingress nginx了解到这是可能的,并对此进行了研究。如本文所述,可以通过如下方式设置configMap来完成:

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-configmap-example
data:
  9000: "default/my-service-name:7051

,但它的完整用法没有明确描述,也没有在文档中找到完整的示例。

我已经安装了《安装指南》中提到的ingress nginx,但我不确定下一步将如何暴露我的Pod。

额外信息

  • Pod中要从集群中公开的端口是7051
  • 我有一个NodePort服务,它以我的Pod端口为目标,该端口可用于暴露入口

共有2个答案

鲁华灿
2023-03-14

如果使用helm安装,可以通过设置值来公开tcp端口。

# add helm repo
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

驾驶仪显示值ingress nginx/ingress nginx将显示值。yaml文件供参考,有两个用于公开端口的字典:tcp和udp:

# TCP service key:value pairs
# Ref: https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/exposing-tcp-udp-services.md
##
tcp: {}
#  8080: "default/example-tcp-svc:9000"

# UDP service key:value pairs
# Ref: https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/exposing-tcp-udp-services.md
##
udp: {}
#  53: "kube-system/kube-dns:53"

要从命令行设置值,请执行以下操作:

# set `tcp` dictionary in values (other `helm install` options omitted, only left options regarding to exposing tcp ports)
helm install ingress-nginx ingress-nginx/ingress-nginx --set tcp.12345=some-namespace/some-service:80

李康安
2023-03-14

因此,为了实现这一点,您可以这样做:

  1. 首先创建添加到帖子中的configMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-configmap-example
data:
  9000: "default/my-service-name:7051

然后通过将此标志添加到容器参数来编辑nginx入口控制器部署,如下所示:

...
containers:
- name: nginx-ingress-controller
  image: "quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1"
  imagePullPolicy: "IfNotPresent"
  args:
    - /nginx-ingress-controller
    - --default-backend-service=nginx-ingress/nginx-ingress-default-backend
    - --election-id=ingress-controller-leader
    - --ingress-class=nginx
    - --configmap=nginx-ingress/nginx-ingress-controller
    - --tcp-services-configmap=default/tcp-configmap-example
    ...

通过向LoadBalancer添加端口来编辑LoadBalancer服务

...
ports:
- name: http
  port: 80
  protocol: TCP
  targetPort: http
- name: https
  port: 443
  protocol: TCP
  targetPort: https
- name: some-service-port
  port: 7051
  protocol: TCP

希望有帮助!

 类似资料:
  • 我有一个网站在kubernetes集群中运行。我可以在本地访问它,但希望通过internet访问它。(我有一个注册域),但外部IP一直挂起 我按照以下指示工作:https://dev.to/peterj/expose-a-kubernetes-service-on-your-own-custom-domain-52dd 这是服务和入口的代码 因此,我正在使用helm安装nginx控制器,但在那之后

  • 我是整个Kubernetes社区的新手,目前我正在尝试使用Ingress Nginx来暴露仪表板。我试过几种方法,但我找不到一个很好的解释如何暴露仪表板入口。我现在拥有的只是一个仪表板,可以通过“kubectl port forward”访问。我还安装了Ingress Nginx,控制器正在运行。我应该如何开始为kubernetes仪表板创建入口?

  • 如果之前已经回答过,我很抱歉,但我对Ingress Nginx正在与服务合作感到有点困惑。 我正在尝试在我的库伯内特斯环境中实现nginx入口。到目前为止,我有一个ingres-nginx-控制器-部署设置,以及默认后端的部署和服务。我仍然需要创建我的实际入口资源、ingres-nginx-控制器-服务和我的后端。 <代码>卷曲 我的问题是这是怎么可能的,我可以在集群之外的浏览器上为我的节点访问端

  • 我的公司有一个伪造的CA证书。实例com和一张伪造地图的唱片。实例com连接到我们的负载平衡器的IP 负载平衡器正在将流量转发到我们的Kubernetes群集。 在集群中,我部署了nginx ingress helm图表,在30200处公开了https节点端口 我根据上述证书创建了一个名为test secret的k8s TLS机密。 我部署了一个带有服务“test”的应用程序,并安装了以下入口:

  • 我正在Kubernetes集群中运行2个服务。 价格SVC 服务以“ClusterIP”类型部署,入口(netcalar)位于服务前面。 调度运行良好,我可以从库伯内特斯集群外部访问调度。 现在,尝试从pricesvc访问计划vc。我可以使用ClusterIP服务endpoint或入口。由于我计划在多个数据中心运行库伯内特斯集群,因此我将在DC的Active/Active中运行我的应用程序,因此我

  • 我试图设置Kubernetes入口,将外部http流量路由到前端pod(路径/)和后端pod(路径/rest/*),但我总是得到400错误,而不是主nginx索引。html。 所以我在第https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer页尝试了谷歌库伯内特斯的例子,但我总是得到400个错误。有什么想法吗?