[kubernetes]-ingress开启非80或443的tcp端口
需求:部分服务不想通过80端口被访问,网关上对80端口有限制,只允许内网访问80和443,所以外网域名必须带端口号访问。以前是直接映射到服务器的端口号,k8s不想通过label指定机子部署。于是研究一下ingress 开启除80和443以外的端口创建tcp-service.yaml暴露tcp端口# tcp-service.yamlapiVersion: v1kind: Servicemetadat
需求:部分服务不想通过80端口被访问,网关上对80端口有限制,只允许内网访问80和443,所以外网域名必须带端口号访问。以前是直接映射到服务器的端口号,k8s不想通过label指定机子部署。于是研究一下ingress 开启除80和443以外的端口
创建tcp-service.yaml 暴露tcp端口
# tcp-service.yaml
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
- name: https
port: 443
targetPort: 443
protocol: TCP
- name: proxied-tcp-9000
port: 9000
targetPort: 9000
protocol: TCP
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
创建tcp-data.yaml
# tcp-data.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
data:
# <namespace/service name>:<service port>:[PROXY]:[PROXY]
9000: "test/test-openapi:80"
这个test/test-openapi:80 是namespace 为test下的service name 为test-openapi, service 端口为80的服务
应用2个yaml
kubectl apply -f tcp-service.yaml
kubectl apply -f tcp-data.yaml
比较ingress-nginx service应用前后的变化
kubectl get svc -n ingress-nginx
前
后
此时在label为ingress的node节点上可以看到端口9000已经开启,测试了80和443服务还是没有问题的。
查看configmap如下
kubectl edit cm/tcp-services -n ingress-nginx
进入ingress的pod查看ingress的生成的nginx配置
访问nodeip+9000端口测试服务是否可用
这里直接域名解析到nginx 再转发给ingress的node的9000端口或者域名直接指向ingress的服务器即可
原外网域名+端口
官方文档
https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/
更多推荐
所有评论(0)