Nếu cụm K8s của bạn thực hiện các yêu cầu bên ngoài — đến API của đối tác, đến các chợ điện tử, đến các nền tảng quảng cáo — sớm hay muộn bạn sẽ gặp phải việc chặn theo IP. Ingress Controller tự quản lý lưu lượng truy cập đến, nhưng để thực hiện các yêu cầu ra ngoài qua các pod cần một sơ đồ riêng với proxy. Trong bài viết này, chúng ta sẽ phân tích cách cấu hình điều này đúng cách: từ việc chọn loại proxy đến các cấu hình YAML cụ thể cho NGINX Ingress và Traefik.
Tại sao cần proxy trong Kubernetes: các kịch bản thực tế
Kubernetes là một trình điều phối, và hầu hết các bài viết về nó nói về lưu lượng truy cập đến: cách cấu hình Ingress, cách phát hành chứng chỉ TLS, cách định tuyến các yêu cầu đến các dịch vụ. Nhưng có một khía cạnh khác: lưu lượng truy cập ra từ các pod. Chính tại đây xảy ra các vấn đề với việc chặn, giới hạn địa lý và giới hạn theo IP.
Hãy xem xét các nhiệm vụ cụ thể, nơi mà proxy trong cụm K8s trở thành một điều cần thiết:
- Phân tích và giám sát giá cả. Cụm của bạn chạy CronJob mỗi 15 phút và thu thập dữ liệu từ Wildberries, Ozon, Amazon. Nếu không có xoay vòng IP, sau 2–3 giờ bạn sẽ bị cấm trên toàn bộ dải IP của nhà cung cấp đám mây của bạn.
- Thao tác với API quảng cáo. Facebook Marketing API, TikTok Ads API, Google Ads API — tất cả đều theo dõi nguồn gốc của các yêu cầu. Nếu hàng chục pod gửi yêu cầu từ một IP của trung tâm dữ liệu, đó là một tín hiệu để tự động chặn.
- Kiểm tra địa lý. Dịch vụ của bạn cần hiển thị nội dung khác nhau cho người dùng từ các quốc gia khác nhau. Qua proxy, các pod có thể giả lập các yêu cầu từ các khu vực cần thiết cho các bài kiểm tra tự động.
- Vượt qua các hạn chế của công ty. Trong một số hạ tầng, toàn bộ lưu lượng ra phải đi qua proxy của công ty — đây là yêu cầu tuân thủ.
- Thao tác với API đối tác có danh sách trắng IP. Khi đối tác chỉ cho phép các yêu cầu từ các IP cụ thể, và cụm của bạn mở rộng và thay đổi địa chỉ — proxy với các IP tĩnh giải quyết vấn đề.
Quan trọng là phải hiểu sự phân chia kiến trúc: Ingress Controller quản lý lưu lượng truy cập đến (từ người dùng đến các dịch vụ của bạn), trong khi proxy cho các yêu cầu ra ngoài — là một nhiệm vụ riêng biệt. Tuy nhiên, chúng có liên quan: cấu hình proxy thường được đặt ở cấp độ của cùng một Ingress Controller hoặc thông qua các chú thích mà nó đọc.
💡 Phân định quan trọng
Trong bài viết này, chúng ta sẽ phân tích hai kịch bản: (1) cấu hình Ingress Controller như một proxy ngược cho các máy chủ upstream bên ngoài, và (2) định tuyến lưu lượng ra từ các pod qua một máy chủ proxy bên ngoài. Cả hai kịch bản đều xuất hiện trong sản xuất.
Loại proxy nào nên chọn cho cụm K8s
Việc chọn loại proxy ảnh hưởng trực tiếp đến thời gian mà cụm của bạn có thể hoạt động mà không bị chặn. IP của trung tâm dữ liệu — là rẻ nhất, nhưng dễ dàng bị xác định và chặn. IP cư trú và di động — đắt hơn, nhưng đáng tin cậy hơn nhiều cho các nhiệm vụ mà việc giả lập người dùng thực là quan trọng.
| Loại proxy | Tốc độ | Rủi ro bị chặn | Kịch bản tốt nhất trong K8s |
|---|---|---|---|
| Trung tâm dữ liệu | Cao | Cao | API nội bộ, tuân thủ doanh nghiệp, tích hợp đối tác với danh sách trắng IP |
| Cư trú | Trung bình | Thấp | Phân tích chợ điện tử, thao tác với API quảng cáo, kiểm tra địa lý |
| Di động | Trung bình | Tối thiểu | Facebook Ads API, TikTok API, các nhiệm vụ có tải cao với rủi ro bị cấm |
Đối với hầu hết các nhiệm vụ trong cụm K8s liên quan đến phân tích hoặc thao tác với các nền tảng quảng cáo, lựa chọn tối ưu là proxy cư trú với xoay vòng. Chúng cung cấp các IP thực của người dùng gia đình, và các thuật toán bảo vệ trang web coi các yêu cầu như lưu lượng truy cập trình duyệt thông thường.
Về mặt giao thức cho K8s, HTTP/HTTPS-proxy là phổ biến nhất — nó được hỗ trợ bởi tất cả các HTTP-client phổ biến trong bất kỳ ngôn ngữ lập trình nào thông qua các biến môi trường tiêu chuẩn HTTP_PROXY và HTTPS_PROXY. SOCKS5 chỉ cần thiết cho các giao thức không tiêu chuẩn hoặc khi cần proxy không chỉ HTTP.
Cấu hình proxy qua NGINX Ingress Controller
NGINX Ingress Controller là lựa chọn phổ biến nhất trong K8s. Hãy xem xét hai kịch bản: cấu hình NGINX như một proxy ngược đến upstream bên ngoài qua máy chủ proxy, và cấu hình toàn cầu cho proxy ra ngoài cho chính controller.
Chú thích cho việc proxy các yêu cầu đến upstream
NGINX Ingress hỗ trợ các chú thích để quản lý hành vi của proxy. Nếu bạn cần Ingress chuyển tiếp các yêu cầu đến dịch vụ bên ngoài qua một proxy trung gian, hãy sử dụng ConfigMap với cấu hình tùy chỉnh:
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-ingress-controller
namespace: ingress-nginx
data:
# Proxy HTTP toàn cầu cho các yêu cầu ra ngoài của NGINX
http-snippet: |
proxy_connect_timeout 10s;
proxy_read_timeout 30s;
proxy_send_timeout 30s;
# Cấu hình upstream qua proxy
use-proxy-protocol: "false"
proxy-real-ip-cidr: "0.0.0.0/0"
Tài nguyên Ingress với các chú thích cho proxy
Đối với một tài nguyên Ingress riêng biệt, bạn có thể đặt các tham số proxy qua các chú thích. Điều này hữu ích khi các dịch vụ khác nhau yêu cầu các thời gian chờ và cấu hình khác nhau:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-service-ingress
namespace: production
annotations:
kubernetes.io/ingress.class: "nginx"
# Thời gian chờ của proxy
nginx.ingress.kubernetes.io/proxy-connect-timeout: "10"
nginx.ingress.kubernetes.io/proxy-read-timeout: "60"
nginx.ingress.kubernetes.io/proxy-send-timeout: "60"
# Kích thước bộ đệm
nginx.ingress.kubernetes.io/proxy-buffer-size: "16k"
nginx.ingress.kubernetes.io/proxy-buffers-number: "8"
# Chuyển tiếp IP thực của khách hàng
nginx.ingress.kubernetes.io/use-forwarded-headers: "true"
nginx.ingress.kubernetes.io/forwarded-for-header: "X-Forwarded-For"
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Cấu hình proxy bên ngoài cho các yêu cầu ra ngoài của pod NGINX
Nếu chính NGINX Ingress Controller cần thực hiện các yêu cầu ra ngoài qua một proxy bên ngoài (ví dụ, để kiểm tra sức khỏe các điểm cuối bên ngoài), cần đặt các biến môi trường trong Deployment của controller:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
template:
spec:
containers:
- name: controller
image: registry.k8s.io/ingress-nginx/controller:v1.9.4
env:
- name: HTTP_PROXY
valueFrom:
secretKeyRef:
name: proxy-credentials
key: http-proxy-url
- name: HTTPS_PROXY
valueFrom:
secretKeyRef:
name: proxy-credentials
key: https-proxy-url
- name: NO_PROXY
value: "localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.cluster.local"
Lưu ý đến biến NO_PROXY — nó rất quan trọng. Nếu không có nó, toàn bộ lưu lượng nội bộ trong cụm cũng sẽ đi qua proxy bên ngoài, điều này sẽ làm hỏng sự tương tác giữa các dịch vụ. Trong NO_PROXY, luôn bao gồm các dải RFC-1918 và hậu tố .cluster.local.
Cấu hình proxy trong Traefik Ingress Controller
Traefik là một lựa chọn phổ biến thay thế cho NGINX Ingress, đặc biệt là khi kết hợp với Helm và trong các cụm quản lý (k3s, Docker Swarm, Nomad). Traefik có hệ thống cấu hình riêng thông qua CRD (Custom Resource Definitions) và các cấu hình tĩnh/động.
Cấu hình tĩnh Traefik với proxy
apiVersion: v1
kind: ConfigMap
metadata:
name: traefik-config
namespace: traefik
data:
traefik.yaml: |
# Cấu hình tĩnh Traefik
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
# Cài đặt để hoạt động qua proxy
serversTransport:
insecureSkipVerify: false
maxIdleConnsPerHost: 200
dialTimeout: 10s
responseHeaderTimeout: 30s
# Ghi log cho chẩn đoán proxy
log:
level: INFO
accessLog:
fields:
headers:
defaultMode: keep
names:
X-Forwarded-For: keep
X-Real-IP: keep
Middleware để thêm các tiêu đề proxy
Trong Traefik, bạn có thể tạo Middleware, sẽ thêm hoặc sửa đổi các tiêu đề khi chuyển tiếp các yêu cầu. Điều này hữu ích để truyền tải chính xác IP thực của khách hàng qua chuỗi proxy:
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: proxy-headers
namespace: production
spec:
headers:
customRequestHeaders:
X-Forwarded-Proto: "https"
# Xóa các tiêu đề có thể tiết lộ hạ tầng
customResponseHeaders:
X-Powered-By: ""
Server: ""
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: my-app-route
namespace: production
spec:
entryPoints:
- websecure
routes:
- match: Host(`myapp.example.com`)
kind: Rule
middlewares:
- name: proxy-headers
services:
- name: my-service
port: 80
Biến môi trường cho Traefik Deployment
Tương tự như NGINX, đối với Traefik, chúng ta đặt các biến môi trường thông qua giá trị Helm hoặc trực tiếp trong Deployment. Khi sử dụng Helm chart, điều này được thực hiện thông qua values.yaml:
# values.yaml cho Traefik Helm chart
deployment:
enabled: true
kind: Deployment
env:
- name: HTTP_PROXY
valueFrom:
secretKeyRef:
name: proxy-credentials
key: http-proxy-url
- name: HTTPS_PROXY
valueFrom:
secretKeyRef:
name: proxy-credentials
key: https-proxy-url
- name: NO_PROXY
value: "localhost,127.0.0.1,10.96.0.0/12,10.244.0.0/16,.cluster.local,.svc"
Proxy qua biến môi trường trong các pod
Cách phổ biến nhất để cấu hình proxy ra ngoài cho bất kỳ pod nào là qua các biến môi trường tiêu chuẩn. Phương pháp này hoạt động độc lập với ngôn ngữ lập trình và framework: Python requests, Go net/http, Node.js axios, Java HttpClient — tất cả đều tự động đọc HTTP_PROXY và HTTPS_PROXY.
Tùy chọn 1: Trực tiếp trong Pod Spec
apiVersion: v1
kind: Pod
metadata:
name: scraper-pod
namespace: production
spec:
containers:
- name: scraper
image: mycompany/scraper:latest
env:
- name: HTTP_PROXY
value: "http://username:[email protected]:8080"
- name: HTTPS_PROXY
value: "http://username:[email protected]:8080"
- name: NO_PROXY
value: "localhost,127.0.0.1,10.0.0.0/8,.cluster.local"
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
⚠️ Đừng lưu trữ thông tin xác thực ở dạng rõ ràng!
Ví dụ trên được trình bày để minh họa. Trong sản xuất, thông tin xác thực proxy luôn phải được lưu trữ trong Kubernetes Secret và được truyền qua secretKeyRef. Chi tiết hơn — trong phần về Secrets bên dưới.
Tùy chọn 2: Qua ConfigMap cho nhiều pod
Nếu proxy được sử dụng bởi nhiều Deployment, tiện lợi hơn khi đưa các cài đặt vào ConfigMap và kết nối nó qua envFrom:
apiVersion: v1
kind: ConfigMap
metadata:
name: proxy-config
namespace: production
data:
NO_PROXY: "localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,.cluster.local,.svc.cluster.local"
PROXY_TIMEOUT: "30"
PROXY_MAX_RETRIES: "3"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: price-monitor
namespace: production
spec:
replicas: 5
selector:
matchLabels:
app: price-monitor
template:
metadata:
labels:
app: price-monitor
spec:
containers:
- name: monitor
image: mycompany/price-monitor:v2.1
envFrom:
- configMapRef:
name: proxy-config
- secretRef:
name: proxy-credentials
ports:
- containerPort: 8080
Tùy chọn 3: Mút hóa WebhookAdmissionController
Đối với các cụm doanh nghiệp, nơi tất cả các pod đều phải sử dụng proxy, có thể cấu hình một webhook admission mút hóa, tự động thêm các biến môi trường proxy vào tất cả các pod được tạo ra. Giải pháp này được sử dụng trong các hạ tầng doanh nghiệp, nơi tuân thủ yêu cầu rằng toàn bộ lưu lượng ra phải đi qua proxy của công ty. Việc triển khai một webhook như vậy nằm ngoài phạm vi của bài viết này, nhưng cần biết về sự tồn tại của nó.
Xoay vòng IP và quản lý hồ bơi proxy trong K8s
Proxy tĩnh — là tốt cho tuân thủ doanh nghiệp, nhưng không tốt cho các nhiệm vụ cần tránh việc chặn. Nếu 50 pod của bạn gửi yêu cầu qua cùng một IP, IP đó sẽ bị chặn rất nhanh. Giải pháp — xoay vòng proxy.
Sơ đồ với Proxy Sidecar
Một trong những mẫu — chạy một tác nhân proxy như một container sidecar bên cạnh ứng dụng chính. Sidecar nhận các yêu cầu trên localhost:8080 và chuyển tiếp chúng qua một hồ bơi proxy bên ngoài đang xoay vòng:
apiVersion: apps/v1
kind: Deployment
metadata:
name: scraper-with-proxy-sidecar
namespace: production
spec:
replicas: 10
selector:
matchLabels:
app: scraper
template:
metadata:
labels:
app: scraper
spec:
containers:
# Ứng dụng chính
- name: scraper
image: mycompany/scraper:latest
env:
- name: HTTP_PROXY
value: "http://localhost:8080"
- name: HTTPS_PROXY
value: "http://localhost:8080"
- name: NO_PROXY
value: "localhost,127.0.0.1,.cluster.local"
# Sidecar: tác nhân proxy cục bộ với xoay vòng
- name: proxy-rotator
image: mycompany/proxy-rotator:latest
ports:
- containerPort: 8080
env:
- name: PROXY_LIST_URL
valueFrom:
secretKeyRef:
name: proxy-credentials
key: api-endpoint
- name: ROTATION_INTERVAL
value: "60" # xoay vòng mỗi 60 giây
resources:
requests:
memory: "64Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "200m"
Sơ đồ với Proxy Service trung tâm
Một cách tiếp cận thay thế — một Proxy Service duy nhất bên trong cụm, mà tất cả các pod đều truy cập. Điều này dễ quản lý hơn: chỉ cần cập nhật một Secret với thông tin xác thực proxy, và tất cả các pod sẽ tự động bắt đầu sử dụng dữ liệu mới.
apiVersion: v1
kind: Service
metadata:
name: proxy-gateway
namespace: proxy-system
spec:
selector:
app: proxy-gateway
ports:
- name: http
port: 8080
targetPort: 8080
- name: socks5
port: 1080
targetPort: 1080
type: ClusterIP
---
# Các pod sử dụng proxy qua DNS nội bộ
# HTTP_PROXY=http://proxy-gateway.proxy-system.svc.cluster.local:8080
Đối với các nhiệm vụ mà tính ẩn danh và rủi ro bị chặn tối thiểu là rất quan trọng (ví dụ, phân tích chợ điện tử hoặc thao tác với API quảng cáo), chúng tôi khuyên bạn nên sử dụng proxy cư trú với xoay vòng — chúng cung cấp các IP thực của người dùng gia đình, điều này làm cho lưu lượng truy cập từ cụm của bạn không thể phân biệt với lưu lượng truy cập trình duyệt thông thường.
Lưu trữ thông tin xác thực proxy trong Kubernetes Secrets
Việc lưu trữ thông tin xác thực một cách an toàn là yêu cầu bắt buộc cho bất kỳ cụm sản xuất nào. Không bao giờ chèn tên đăng nhập/mật khẩu proxy trực tiếp vào các manifest YAML được lưu trữ trong kho Git.
Tạo Secret cho proxy
# Tạo qua kubectl (các giá trị được mã hóa base64 tự động)
kubectl create secret generic proxy-credentials \
--namespace=production \
--from-literal=http-proxy-url='http://user:[email protected]:8080' \
--from-literal=https-proxy-url='http://user:[email protected]:8080' \
--from-literal=socks5-proxy-url='socks5://user:[email protected]:1080'
# Kiểm tra Secret đã tạo
kubectl get secret proxy-credentials -n production -o yaml
Manifest YAML của Secret
apiVersion: v1
kind: Secret
metadata:
name: proxy-credentials
namespace: production
labels:
app: proxy-config
managed-by: ops-team
type: Opaque
# Các giá trị được mã hóa base64
# echo -n 'http://user:pass@proxy:8080' | base64
stringData:
# stringData cho phép chỉ định các giá trị ở dạng rõ ràng
# Kubernetes tự động mã hóa chúng thành base64
http-proxy-url: "http://user:[email protected]:8080"
https-proxy-url: "http://user:[email protected]:8080"
proxy-host: "gate.proxycove.com"
proxy-port: "8080"
proxy-username: "user"
proxy-password: "password"
Sử dụng Secret trong Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-worker
namespace: production
spec:
replicas: 3
selector:
matchLabels:
app: api-worker
template:
metadata:
labels:
app: api-worker
spec:
containers:
- name: worker
image: mycompany/api-worker:latest
env:
- name: HTTP_PROXY
valueFrom:
secretKeyRef:
name: proxy-credentials
key: http-proxy-url
- name: HTTPS_PROXY
valueFrom:
secretKeyRef:
name: proxy-credentials
key: https-proxy-url
- name: NO_PROXY
value: "localhost,127.0.0.1,10.0.0.0/8,.cluster.local"
# Đối với các ứng dụng đọc host/port riêng biệt
- name: PROXY_HOST
valueFrom:
secretKeyRef:
name: proxy-credentials
key: proxy-host
- name: PROXY_PORT
valueFrom:
secretKeyRef:
name: proxy-credentials
key: proxy-port
Tích hợp với các kho lưu trữ bí mật bên ngoài
Trong môi trường doanh nghiệp, nên sử dụng External Secrets Operator để đồng bộ hóa các bí mật từ HashiCorp Vault, AWS Secrets Manager hoặc Azure Key Vault. Điều này cho phép tự động cập nhật thông tin xác thực proxy mà không cần can thiệp thủ công và khởi động lại các pod:
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: proxy-credentials-ext
namespace: production
spec:
refreshInterval: 1h
secretStoreRef:
name: vault-backend
kind: ClusterSecretStore
target:
name: proxy-credentials
creationPolicy: Owner
data:
- secretKey: http-proxy-url
remoteRef:
key: secret/proxy/proxycove
property: http_proxy_url
- secretKey: https-proxy-url
remoteRef:
key: secret/proxy/proxycove
property: https_proxy_url
Chẩn đoán và các lỗi thường gặp khi cấu hình proxy trong K8s
Ngay cả khi cấu hình đúng, có thể xảy ra vấn đề. Chúng ta sẽ phân tích những vấn đề phổ biến nhất và cách chẩn đoán.
Vấn đề 1: Lưu lượng nội bộ trong cụm đi qua proxy
Triệu chứng: các pod không thể nhìn thấy nhau, phân giải DNS bên trong cụm bị hỏng, các dịch vụ không phản hồi. Nguyên nhân — biến NO_PROXY không được cấu hình.
Giá trị tối thiểu cần thiết cho NO_PROXY cho cụm K8s tiêu chuẩn:
NO_PROXY=localhost,127.0.0.1,::1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.cluster.local,.svc,.svc.cluster.local,kubernetes.default.svc
Vấn đề 2: Proxy không được áp dụng cho một pod cụ thể
Chẩn đoán: vào pod và kiểm tra các biến môi trường:
# Kiểm tra các biến môi trường trong pod
kubectl exec -it <pod-name> -n production -- env | grep -i proxy
# Kiểm tra kết nối qua proxy từ pod
kubectl exec -it <pod-name> -n production -- curl -v --proxy http://proxy:8080 https://httpbin.org/ip
# Kiểm tra rằng Secret được gắn đúng cách
kubectl exec -it <pod-name> -n production -- env | grep PROXY
Vấn đề 3: Lỗi TLS khi sử dụng HTTPS-proxy
Nếu proxy sử dụng chứng chỉ tự ký hoặc CA doanh nghiệp, các ứng dụng sẽ nhận được lỗi xác thực TLS. Giải pháp — thêm chứng chỉ CA của proxy vào danh sách tin cậy:
# Tạo ConfigMap với chứng chỉ CA
kubectl create configmap proxy-ca-cert \
--from-file=proxy-ca.crt=./proxy-ca.crt \
-n production
# Gắn vào pod
spec:
containers:
- name: app
volumeMounts:
- name: proxy-ca
mountPath: /etc/ssl/certs/proxy-ca.crt
subPath: proxy-ca.crt
volumes:
- name: proxy-ca
configMap:
name: proxy-ca-cert
Vấn đề 4: Các yêu cầu chậm qua proxy
Nếu các yêu cầu qua proxy chậm hơn đáng kể so với các yêu cầu trực tiếp — hãy kiểm tra:
- Phân giải DNS: đảm bảo rằng các yêu cầu DNS không đi qua proxy (thêm vào
NO_PROXY) - Kết nối Keep-alive: cấu hình hồ bơi kết nối đến máy chủ proxy
- Vị trí địa lý: máy chủ proxy phải gần về mặt vật lý với tài nguyên mục tiêu
- Loại proxy: cho các nhiệm vụ có tốc độ cao, hãy xem xét proxy trung tâm dữ liệu — chúng cung cấp độ trễ tối thiểu
Các lệnh hữu ích cho chẩn đoán
# Kiểm tra log của Ingress Controller
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx --tail=100
# Kiểm tra sự kiện của pod
kubectl describe pod <pod-name> -n production
# Kiểm tra kết nối proxy từ pod
kubectl run test-proxy --image=curlimages/curl --rm -it --restart=Never -- \
curl -x http://user:pass@proxy:8080 -v https://httpbin.org/ip
# Kiểm tra rằng Secret tồn tại và chứa các khóa cần thiết
kubectl get secret proxy-credentials -n production -o jsonpath='{.data}' | python3 -c "
import sys, json, base64
data = json.load(sys.stdin)
for k, v in data.items():
print(f'{k}: {base64.b64decode(v).decode()[:20]}...')
"
Kết luận và khuyến nghị
Cấu hình proxy trong Kubernetes không phải là một nhiệm vụ đơn lẻ, mà là một phần của kiến trúc an ninh mạng của cụm. Hãy tóm tắt:
- Đối với NGINX Ingress Controller — sử dụng các chú thích để cấu hình các tham số proxy ở cấp độ các tài nguyên Ingress riêng biệt, và các biến môi trường trong Deployment cho các cài đặt toàn cầu của lưu lượng ra.
- Đối với Traefik — kết hợp cấu hình tĩnh qua ConfigMap với Middleware để quản lý các tiêu đề.
- Đối với các pod — các biến tiêu chuẩn
HTTP_PROXY/HTTPS_PROXYqua Secrets — là cách tiếp cận phổ biến và an toàn nhất. - Luôn luôn cấu hình NO_PROXY — nếu không, lưu lượng nội bộ trong cụm sẽ bị hỏng.
- Không bao giờ lưu trữ thông tin xác thực proxy ở dạng rõ ràng trong các manifest hoặc trong Git.
- Đối với sản xuất — sử dụng External Secrets Operator để tự động xoay vòng thông tin xác thực.
Nếu cụm K8s của bạn thực hiện các nhiệm vụ mà tính ổn định của IP và rủi ro bị chặn tối thiểu là rất quan trọng — phân tích, thao tác với API quảng cáo, kiểm tra địa lý — chúng tôi khuyên bạn nên sử dụng proxy cư trú. Chúng cung cấp các IP thực của người dùng gia đình, mà các thuật toán bảo vệ coi là lưu lượng hợp pháp. Đối với các nhiệm vụ có yêu cầu cao về tốc độ và rủi ro tối thiểu từ các nền tảng di động, proxy di động sẽ là lựa chọn tuyệt vời — chúng hoạt động qua các mạng 4G/5G thực tế của các nhà mạng.
```