Redis hoạt động trên 6379 không phải là cổng HTTP (80,443). Vì vậy, bạn cần bật hỗ trợ TCP / UDP trong bộ điều khiển nhập nginx. Tài liệu minikube ở đây cho biết cách thực hiện điều đó cho redis.
Cập nhật sơ đồ cấu hình dịch vụ TCP và / hoặc UDP
Mượn từ hướng dẫn định cấu hình các dịch vụ TCP và UDP với bộ điều khiển nginx nhập vào, chúng ta sẽ cần chỉnh sửa sơ đồ cấu hình được cài đặt theo mặc định khi bật addon nhập vào minikube.
Có 2 sơ đồ cấu hình, 1 cho các dịch vụ TCP và 1 cho các dịch vụ UDP. Theo mặc định, chúng trông như thế này:
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
name: udp-services
namespace: ingress-nginx
Vì các sơ đồ cấu hình này là tập trung và có thể chứa các cấu hình, nên tốt nhất là chúng tôi chỉ vá chúng thay vì ghi đè chúng hoàn toàn.
Hãy sử dụng triển khai redis này làm ví dụ:
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
Tạo tệp redis-deployment.yaml
và dán nội dung bên trên. Sau đó cài đặt triển khai redis bằng lệnh sau:
kubectl apply -f redis-deployment.yaml
Tiếp theo, chúng tôi cần tạo một dịch vụ có thể định tuyến lưu lượng truy cập đến các nhóm của chúng tôi:
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
Tạo tệp redis-service.yaml
và dán nội dung bên trên. Sau đó cài đặt dịch vụ redis bằng lệnh sau:
kubectl apply -f redis-service.yaml
Để thêm dịch vụ TCP vào bộ điều khiển nhập nginx, bạn có thể chạy lệnh sau:
kubectl patch configmap tcp-services -n kube-system --patch '{"data":{"6379":"default/redis-service:6379"}}'
Ở đâu:
6379
:cổng mà dịch vụ của bạn sẽ lắng nghe từ bên ngoài máy ảo minikube
default
:không gian tên mà dịch vụ của bạn được cài đặt trong
redis-service
:tên của dịch vụ
Chúng tôi có thể xác minh rằng tài nguyên của chúng tôi đã được vá bằng lệnh sau:
kubectl get configmap tcp-services -n kube-system -o yaml
Chúng ta sẽ thấy một cái gì đó như thế này:
NhãnapiVersion: 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
Giá trị duy nhất bạn cần xác thực là có một giá trị trong thuộc tính dữ liệu trông giống như sau:
"6379": default/redis-service:6379
Vá bộ điều khiển ingress-nginx
Có một bước cuối cùng phải được thực hiện để có được kết nối từ cụm bên ngoài. Chúng tôi cần vá bộ điều khiển nginx của mình để nó đang lắng nghe trên cổng 6379 và có thể định tuyến lưu lượng truy cập đến dịch vụ của bạn. Để thực hiện việc này, chúng tôi cần tạo một tệp vá.
spec:
template:
spec:
containers:
- name: ingress-nginx-controller
ports:
- containerPort: 6379
hostPort: 6379
Tạo một tệp có tên ingress-nginx-controller-patch.yaml
và dán nội dung ở trên.
Tiếp theo, hãy áp dụng các thay đổi với lệnh sau:
kubectl patch deployment ingress-nginx-controller --patch "$(cat ingress-nginx-controller-patch.yaml)" -n kube-system