如何在Azure容器应用中托管MongoDB?求可运行示例
启用TCP传输的Ingress可运行示例
以下是基于NGINX Ingress Controller的TCP转发完整可运行示例,适用于Kubernetes环境:
1. 创建TCP端口映射ConfigMap
这个ConfigMap用来定义Ingress要转发的TCP端口与后端Service的对应关系:
apiVersion: v1 kind: ConfigMap metadata: name: tcp-services namespace: ingress-nginx # 需与Ingress Controller的命名空间保持一致 data: # 格式:外部端口:命名空间/服务名称:服务端口 "30001": "default/tcp-echo-service:27017"
执行创建命令:kubectl apply -f tcp-configmap.yaml
2. 更新Ingress Controller配置
修改Ingress Controller的Deployment(或DaemonSet),添加ConfigMap挂载并指定TCP配置参数:
apiVersion: apps/v1 kind: Deployment metadata: name: ingress-nginx-controller namespace: ingress-nginx spec: template: spec: containers: - name: controller args: - /nginx-ingress-controller - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services # 添加该参数 volumeMounts: - name: tcp-services mountPath: /etc/nginx/tcp-services.d readOnly: true volumes: - name: tcp-services configMap: name: tcp-services
执行更新命令:kubectl apply -f ingress-controller-deployment.yaml
3. 创建后端TCP服务与Deployment
以TCP回声服务为例,用于验证转发效果:
# TCP服务Deployment apiVersion: apps/v1 kind: Deployment metadata: name: tcp-echo-deployment spec: replicas: 1 selector: matchLabels: app: tcp-echo template: metadata: labels: app: tcp-echo spec: containers: - name: tcp-echo image: k8s.gcr.io/e2e-test-images/agnhost:2.39 args: - tcp-echo - --port=27017 ports: - containerPort: 27017 --- # TCP服务Service apiVersion: v1 kind: Service metadata: name: tcp-echo-service spec: ports: - port: 27017 targetPort: 27017 protocol: TCP selector: app: tcp-echo
执行创建命令:kubectl apply -f tcp-echo.yaml
4. 验证TCP转发
获取Ingress Controller的外部IP:kubectl get svc ingress-nginx-controller -n ingress-nginx
使用nc或telnet测试连接:nc <Ingress-Controller-IP> 30001
输入任意字符后,若能收到相同的回声,说明TCP转发已生效。
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

