使用nginx入口在Kubernetes中的集群外公开TCP端口
因此,我使用Kubernetes在Google云上安装了我的应用程序。我有一个Pod,我想从集群中公开它,它需要TCP请求 我通过研究了解到这是可能的。如中所述,可以通过如下方式设置configMap来完成:使用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
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”。