cilium의 ingress controller가 다른 ingress controller와 다른 점은 deployment, daemonset으로 배포 되는게 아닌, Loadbalancer 또는 nodeport 타입의 서비스를 통해 노출되거나, 선택적으로 호스트 네트워크 또는 deployment, daemonset으로 설치할 수 있다는 점이다.
어떤 방식을 사용하든 cilium에선 서비스 포트에 트래픽이 도착 시 eBPF 코드가 트래픽을 가로채서 TPROXY 커널 기능을 사용해서 Envoy로 전달하며 ingress를 통해 들어오는 트래픽과, ingress로 나가는 트래픽에 cilium network policy를 적용 가능하다.
helm upgrade cilium cilium/cilium \
--namespace kube-system \
--reuse-values \
--set ingressController.enabled=true \
--set ingressController.loadbalancerMode=shared \
--set ingressController.default=true \
--set nodePort.enabled=true
kubectl -n kube-system rollout restart deployment/cilium-operator
kubectl -n kube-system rollout restart ds/cilium
Shell
복사
•
ingress 사용 하지 않고 envoy 트래픽 관리만 사용하려면 아래의 명령어를 사용
helm upgrade cilium cilium/cilium \
--namespace kube-system \
--reuse-values \
--set envoyConfig.enabled=true
kubectl -n kube-system rollout restart deployment/cilium-operator
kubectl -n kube-system rollout restart ds/cilium
Shell
복사
•
proxy 부하 분산은 아래의 명령어를 사용
helm upgrade cilium cilium/cilium \
--namespace kube-system \
--reuse-values \
--set loadBalancer.l7.backend=envoy
kubectl -n kube-system rollout restart deployment/cilium-operator
kubectl -n kube-system rollout restart ds/cilium
Shell
복사
•
Demo App
kubectl apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
Shell
복사
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: basic-ingress
namespace: default
spec:
ingressClassName: cilium
rules:
- http:
paths:
- backend:
service:
name: details
port:
number: 9080
path: /details
pathType: Prefix
- backend:
service:
name: productpage
port:
number: 9080
path: /
pathType: Prefix
YAML
복사
kubectl apply -f ingress.yaml
Shell
복사