nginx-upstream Transport Server
TransportServer resource memungkinkan untuk conifgurasi TCP, UDP dan TLS Passtrough melalui nginx-upstream. Fitur ini berfungsi jika installasi dengan CRD.
Refrensi :
- https://docs.nginx.com/nginx-ingress-controller/configuration/transportserver-resource/
TransportServer resource memungkinkan untuk conifgurasi TCP, UDP dan TLS Passtrough melalui nginx-upstream. Fitur ini berfungsi jika installasi dengan CRD.
Persyaratan
- Untuk tcp dan udp, perlu membuat globalresources terlebih dahulu. Refrensi
- Untuk TLS Passtrough, perlu menambahkan
-enable-tls-passthroughdi command line argument ingress-controller
Simple Testing, Access ssh to pod using tcp passtrough port 22
Untuk mencoba saya membuat pod openssh-server. Nantinya akan expose port 22 dari container, dan coba akses mengggukana ip dari ingress-nginx.
Refrensi dari percobaan : https://stackoverflow.com/questions/68046576/exposing-tcp-service-using-nginx-ingress-controller-operator-on-openshift
- Create deployment + service openssh-server, expose port 22.
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: ssh-server
name: ssh-server
spec:
replicas: 1
selector:
matchLabels:
app: ssh-server
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: ssh-server
spec:
containers:
- image: linuxserver/openssh-server
name: openssh-server
ports:
- name: ssh-port
containerPort: 2222
---
apiVersion: v1
kind: Service
metadata:
labels:
app: ssh-server
name: ssh-server
spec:
ports:
- name: ssh-port
port: 22
protocol: TCP
targetPort: 2222
selector:
app: ssh-server
type: ClusterIP
Hit port 2222. (Default container)

Hit port 22 pakai clusterIP

- Buat
GlobalConfiguration
GlobalConfiguration berfungsi untuk membuat listen port 2250 di ingress-controler. Nantinya port 2250 berfungsi untuk meneruskan port 22 dari deployment ssh-test
apiVersion: k8s.nginx.org/v1alpha1
kind: GlobalConfiguration
metadata:
name: nginx-ingress-config
namespace: nginx-ingress
spec:
listeners:
- name: ssh-tcp
port: 2250 # port yang akan di expose
protocol: TCP

Setelah apply global-config, edit deployment nginx-ingress, tambahkan -global-configuration=<namespace>/name di command section.
kubectl edit deployments.apps -n nginx-ingress nginx-ingress-controller
---
spec:
containers:
- args:
- -global-configuration=nginx-ingress/nginx-ingress-config
- Buat TransportServer
```yaml
apiVersion: k8s.nginx.org/v1alpha1
kind: TransportServer
metadata:
name: ssh-tcp
spec:
listener:
name: ssh-tcp
protocol: TCP
upstreams:
- name: ssh-app
service: ssh-server
port: 22
action:
pass: ssh-app
Verifikasi
Pastikan transportserver sudah valid

Coba hit port 2250 sesuai dari port listeners yang dibuat. Dicoba terlebih dahulu dengan IP Port ingress-controller

Coba hit dengan ClusterIP nginx-controller

Hal tersebut tidak bisa, karena belum mapping port 2250 ke service dari nginx-ingress. Selanjutnya dicoba menambahkan port 2250
kubectl edit svc -n nginx-ingress nginx-ingress-controller
---
spec:
ports:
- name: http
nodePort: 32551
port: 80
protocol: TCP
targetPort: 80
- name: https
nodePort: 31435
port: 443
protocol: TCP
targetPort: 443
- name: ssh-port
port: 2250 # tambahkan port 2250
protocol: TCP
targetPort: 2250
Setelah diedit, bisa di hit menggunakan ClusterIP maupun IPLoadbalancer
