Azure에서 Frontdoo와 AKS를 사용하여 구축을 진행했다.
외부로 노출시키지 않고 안전하게 내부 서비스로 통신할때 Private Link를 각 서비스마다 k8s service에 생성해서 사용했다.
그러다 어느순간 생성이 되질 않았다. 알고보니 AKS에 public, private l4가 하나씩 존재하는데 그 l4에 연결할 수 있는 private link가 최대 8개까지 밖에 되질 않는다.
그래서 뜯어고치는김에 여러 테스트를 진행해보고 결국 NS당 private link한개만 사용하는것으로 구조를 변경해봤다.
기존 : service에 pls를 내부 네트워크에 배포
변경 : nginx ingress-controller의 service에 private link 배포
#!/bin/bash
NAMESPACE=$2
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install --replace $1-nginx ingress-nginx/ingress-nginx \
--namespace $NAMESPACE \
--set controller.replicaCount=2 \
--set controller.nodeSelector."kubernetes\.io/os"=linux \
--set controller.admissionWebhooks.patch.nodeSelector."kubernetes\.io/os"=linux \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-internal"=true \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-pls-create"=true \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-pls-ip-configuration-subnet"="<subnet-name>" \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-pls-name"="stg-${NAMESPACE}-pls" \
--set annotations."app\.kubernetes\.io/managed-by"=$1 \
--set controller.ingressClass=$1-nginx \
--set controller.ingressClassResource.name=$1-nginx \
--set controller.ingressClassResource.controllerValue="k8s.io/$1-nginx"
ingress:
enabled: true
ingressClassName: "stg-web-nginx"
annotations:
hosts:
- host: 'stg.test.com'
paths:
- path: /
pathType: Prefix
service:
- name: stg-test-web
port: 80
ingress:
enabled: true
ingressClassName: "stg-web-nginx"
annotations:
nginx.ingress.kubernetes.io/cors-allow-origin : "*"
nginx.ingress.kubernetes.io/cors-allow-methods: "GET,POST,OPTIONS"
nginx.ingress.kubernetes.io/enable-cors: 'true'
hosts:
- host: 'stg-backend.test.com'
paths:
- path: /
pathType: Prefix
service:
- name: stg-test-backend
port: 80