使用nginx入口在Kubernetes中的集群外公开TCP端口

使用nginx入口在Kubernetes中的集群外公开TCP端口,nginx,tcp,kubernetes,kubernetes-ingress,nginx-ingress,Nginx,Tcp,Kubernetes,Kubernetes Ingress,Nginx Ingress,因此,我使用Kubernetes在Google云上安装了我的应用程序。我有一个Pod,我想从集群中公开它,它需要TCP请求 我通过研究了解到这是可能的。如中所述,可以通过如下方式设置configMap来完成: apiVersion: v1 kind: ConfigMap metadata: name: tcp-configmap-example data: 9000: "default/my-service-name:7051 ... containers: - name: nginx

因此,我使用Kubernetes在Google云上安装了我的应用程序。我有一个Pod,我想从集群中公开它,它需要TCP请求

我通过研究了解到这是可能的。如中所述,可以通过如下方式设置configMap来完成:

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-configmap-example
data:
  9000: "default/my-service-name:7051
...
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
    ...
,但它的完整用法没有明确描述,我也无法在文档中找到完整的示例

如中所述,我已经安装了ingress nginx,但我不确定下一步如何暴露我的Pod

额外信息

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

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

  • 首先创建添加到文章中的configMap
  • 然后,通过将此标志添加到容器参数来编辑nginx入口控制器部署,如下所示:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: tcp-configmap-example
    data:
      9000: "default/my-service-name:7051
    
    ...
    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
    

  • 希望有帮助

    如何找到nginx入口控制器部署?查看kubectl get部署--所有名称空间都没有为我显示任何此类部署。是否有可能在某些设置中不存在此功能(此处使用microk8s)。您需要首先在k8s群集上安装nginx ingress controller。我通过microk8s命令添加了nginx入口,但有点困惑,因为它在入口名称空间中有controllerevisions和守护程序,并且似乎在任何名称空间中都没有部署。显然,我必须编辑守护程序集(它创建ControllerDevices),守护程序集定义pod创建而不是部署。不幸的是,我从未使用过microk8s,但仍然只是删除入口命名空间。我建议安装nginx ingress thgrough helm。如果您没有安装helm,要安装helm,请检查脚本中的
    部分,我不知道需要将哪个端口放在9000中的哪个位置:“默认/我的服务名称:7051”。