Ingress配置转发端口本质,还是利用service nodePort能力,通过暴露ingress的本地端口来转发。 Ingress默认不支持TCP or UDP services。因此Ingress controller使用--tcp-services-configmap和--udp-services-configmap这两个配置达到转发端口的目的。 (文中采用阿里云kubernetes v1.16.9) 检查一下这两个配置是否开启: kubectl get deployment nginx-ingress-controller -n kube-system -o yaml 如图所示,已经开启了,同时表明了,后面需要修改对应 tcp-services configmap 创建一个 namespaces,这个namespaces跟后面的 deployment和service,还有tcp-services configmap都有关系。 部署一个tomat应用kubectl create -f deployment-hello.yaml 创建一个service,kubectl create -f service-hello.yaml 修改 namespace 为 kube-system 下的 ingress-nginx-lb service: 注意: port可以改成其他端口,比如18080 targetPort要跟后面的tcp-services configmap配置保持一致,都是8080 再去看这个nginx-ingress-lb,发现回自动给你添加一个nodePort: 32031。 看看是不是配置成功kubectl get svc -n kube-system 修改 namespace kube-system 下的 tcp-service configmap,添加配置: 在配置data之前,你需要一个deploy+service来 其中 configmap data 的格式为: <namespace/service name>:<service port>:[PROXY]:[PROXY] 通过阿里云提供的 EXTERNAL-IP,也就是 对应阿里云负载均衡的外网IP,即可访问: http://EXTERNAL-IP:18080 同时检查一下阿里云对应的负载均衡,发现对应的端口已经自动监听了,不用再手工在页面上处理。Ingress配置转发端口本质
创建hello tomcat
kubectl create ns dev
# cat deployment-hello.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hello
namespaces: dev
spec:
replicas: 4
template:
metadata:
labels:
run: hello
spec:
containers:
- name: hello
image: tomcat:8
imagePullPolicy: Always
ports:
- name: http
containerPort: 8080
#cat service-hello.yaml
apiVersion: v1
kind: Service
metadata:
name: hello
labels:
name: hello
namespaces: dev
spec:
clusterIP: "None"
ports:
- port: 8080
targetPort: 8080
protocol: TCP
selector:
run: hello
ingress-nginx-lb service
kubectl edit svc/nginx-ingress-lb -n kube-system
- name: hello
port: 18080
protocol: TCP
targetPort: 8080
修改 tcp-services configmap
kubectl edit configmap/tcp-services -n kube-system
data:
8080: dev/hello:8080
参考