Redis bekerja pada 6379 yang bukan port HTTP (80.443). Jadi, Anda perlu mengaktifkan dukungan TCP/UDP di pengontrol ingress nginx. Dokumen minikube di sini menunjukkan cara melakukannya untuk redis.
Perbarui peta konfigurasi layanan TCP dan/atau UDP
Meminjam dari tutorial mengonfigurasi layanan TCP dan UDP dengan pengontrol ingress nginx, kita perlu mengedit configmap yang diinstal secara default saat mengaktifkan addon ingress minikube.
Ada 2 configmaps, 1 untuk layanan TCP dan 1 untuk layanan UDP. Secara default mereka terlihat seperti ini:
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
name: udp-services
namespace: ingress-nginx
Karena peta konfigurasi ini terpusat dan mungkin berisi konfigurasi, sebaiknya kita hanya menambalnya daripada menimpanya sepenuhnya.
Mari kita gunakan penerapan redis ini sebagai contoh:
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-deployment
namespace: default
labels:
app: redis
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- image: redis
imagePullPolicy: Always
name: redis
ports:
- containerPort: 6379
protocol: TCP
Buat file redis-deployment.yaml
dan rekatkan konten di atas. Kemudian instal penerapan redis dengan perintah berikut:
kubectl apply -f redis-deployment.yaml
Selanjutnya kita perlu membuat layanan yang dapat mengarahkan lalu lintas ke pod kita:
apiVersion: v1
kind: Service
metadata:
name: redis-service
namespace: default
spec:
selector:
app: redis
type: ClusterIP
ports:
- name: tcp-port
port: 6379
targetPort: 6379
protocol: TCP
Buat file redis-service.yaml
dan rekatkan konten di atas. Kemudian instal layanan redis dengan perintah berikut:
kubectl apply -f redis-service.yaml
Untuk menambahkan layanan TCP ke pengontrol ingress nginx, Anda dapat menjalankan perintah berikut:
kubectl patch configmap tcp-services -n kube-system --patch '{"data":{"6379":"default/redis-service:6379"}}'
Dimana:
6379
:port yang harus didengarkan layanan Anda dari luar mesin virtual minikube
default
:namespace tempat layanan Anda diinstal
redis-service
:nama layanan
Kami dapat memverifikasi bahwa sumber daya kami telah ditambal dengan perintah berikut:
kubectl get configmap tcp-services -n kube-system -o yaml
Kita akan melihat sesuatu seperti ini:
apiVersion: v1
data:
"6379": default/redis-service:6379
kind: ConfigMap
metadata:
creationTimestamp: "2019-10-01T16:19:57Z"
labels:
addonmanager.kubernetes.io/mode: EnsureExists
name: tcp-services
namespace: kube-system
resourceVersion: "2857"
selfLink: /api/v1/namespaces/kube-system/configmaps/tcp-services
uid: 4f7fac22-e467-11e9-b543-080027057910
Satu-satunya nilai yang perlu Anda validasi adalah bahwa ada nilai di bawah properti data yang terlihat seperti ini:
"6379": default/redis-service:6379
Menambal ingress-nginx-controller
Ada satu langkah terakhir yang harus dilakukan untuk mendapatkan konektivitas dari luar cluster. Kami perlu menambal pengontrol nginx kami agar mendengarkan pada port 6379 dan dapat merutekan lalu lintas ke layanan Anda. Untuk melakukan ini, kita perlu membuat file patch.
spec:
template:
spec:
containers:
- name: ingress-nginx-controller
ports:
- containerPort: 6379
hostPort: 6379
Buat file bernama ingress-nginx-controller-patch.yaml
dan rekatkan konten di atas.
Selanjutnya terapkan perubahan dengan perintah berikut:
kubectl patch deployment ingress-nginx-controller --patch "$(cat ingress-nginx-controller-patch.yaml)" -n kube-system