Use nginx proxy in VKS
bài NLB(layer4) -> nginx-ingress(layer7) trong k8s -> pod backend là bài phổ biến note cho 1 docs về config realip xuyên suốt 3 lớp này
Pre-requirement
-
Already install VNGCloud Controller Manager
-
Update to dev version of VNGCloud Controller Manager
kubectl patch deployment -n kube-system vngcloud-controller-manager -p '{"spec": {"template": {"spec": {"containers": [{"name":"vngcloud-controller-manager","image":"vcr.vngcloud.vn/60108-annd2-ingress/vngcloud-controller-manager:v0.2.0"}]}}}}' kubectl patch deployment -n kube-system vngcloud-controller-manager -p '{"spec": {"template": {"spec": {"containers": [{"name":"vngcloud-controller-manager","image":"vcr.vngcloud.vn/81-vks-public/vngcloud-controller-manager:v0.2.0"}]}}}}' kubectl patch statefulsets -n kube-system vngcloud-ingress-controller -p '{"spec": {"template": {"spec": {"containers": [{"name":"vngcloud-ingress-controller","image":"vcr.vngcloud.vn/60108-annd2-ingress/vngcloud-ingress-controller:v0.2.0"}]}}}}' kubectl patch statefulsets -n kube-system vngcloud-ingress-controller -p '{"spec": {"template": {"spec": {"containers": [{"name":"vngcloud-ingress-controller","image":"vcr.vngcloud.vn/81-vks-public/vngcloud-ingress-controller:v0.2.0"}]}}}}' -
Install sample app to debug via Helm
helm repo add anngdinh https://anngdinh.github.io/helm-charts helm install goapp anngdinh/goapp-debug -
Install nginx-ingress-controller via Helm
helm install nginx-ingress-controller oci://ghcr.io/nginxinc/charts/nginx-ingress --namespace kube-system
Update configmap for nginx-ingress-controller
kubectl edit cm -n kube-system nginx-ingress-controller
data:
proxy-protocol: "True"
real-ip-header: proxy_protocol
real-ip-recursive: "True"
set-real-ip-from: 0.0.0.0/0
Update service nginx-ingress-controller
kubectl annotate service -n kube-system nginx-ingress-controller-controller vks.vngcloud.vn/enable-proxy-protocol="http,https"
Apply sample ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
namespace: default
spec:
ingressClassName: nginx
rules:
- host: kkk.example.com
http:
paths:
- backend:
service:
name: prometheus-node-exporter
port:
number: 9100
path: /metrics
pathType: Exact
Check in log
kubectl logs $(kubectl get pods -n kube-system -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' | grep nginx-ingress-controller-controller) -n kube-system -f
Curl sample:
curl -H 'Host: kkk.example.com' http://_____IP_____/metrics
Update CCM to new version
Get release name of vngcloud-controller-manager
$ helm list -A | grep vngcloud-controller-manager
vngcloud-controller-manager-1716448250 kube-system 10 2024-06-10 17:00:17.866548653 +0700 +07 deployed vngcloud-controller-manager-0.2.3 v0.2.0
Then update release to latest version. You can specific version by using flag --version
helm upgrade vngcloud-controller-manager-1716448250 oci://vcr.vngcloud.vn/81-vks-public/vks-helm-charts/vngcloud-controller-manager \
--namespace kube-system