使用Nginx-Ingress在Kubernetes中将TCP端口暴露出集群

时间:2018-10-30 08:24:03

标签: nginx tcp kubernetes kubernetes-ingress nginx-ingress

所以我已经使用Kubernetes在Google云上设置了我的应用程序。我有一个Pod,我想将其暴露在期望TCP请求的群集之外。

我开始知道可以通过ingress-nginx进行研究。如docs here中所述,可以通过设置如下的configMap来完成:

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

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

我已经按照Installation Guide中的说明安装了ingress-nginx,但是我不确定下一步要暴露我的Pod。

其他信息

  • 我要从群集中公开的Pod中的端口是7051
  • 我有一个针对我Pod端口的NodePort服务,该端口可与Ingress一起使用来公开。

2 个答案:

答案 0 :(得分:0)

在Google Cloud Platform内部,您可以使用type: LoadBalancer以便在 簇。您可以在Exposing Applications using Services这里查看示例。

这是一个简单的例子:

$ kubectl run hello --image=test/hello-world
deployment "hello" created

$ kubectl expose deployment hello --port=8080 --type=LoadBalancer
service "hello" exposed

$ kubectl get service 
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)          AGE
hello        LoadBalancer   10.11.251.34   35.192.25.112   8080:33107/TCP   2m

$ curl 35.192.25.112:8080
<html><head><title>hello world</title></head><body>hello world!</body></html>

您还可以按照Kubernetes文档Exposing an External IP Address to Access an Application in a Cluster

中的说明进行操作。

答案 1 :(得分:0)

因此,要实现此目的,您可以执行以下操作:

  1. 首先创建您添加到帖子中的configMap。
apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-configmap-example
data:
  9000: "default/my-service-name:7051
  1. 然后通过将此标志添加到容器args来编辑您的nginx-ingress-controller部署,如下所示:

    ...
    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
        ...
    
  2. 通过将端口添加到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
    

希望有帮助!