Hi sobat,
Sesuai dengan judul diatas, mau sharing setup ingress di k8s, existing kita menggunakan traefik untuk ingressnya, akan tetapi soon akan kembali ke nginx.
Flow
1graph LR2A[SLB Alibaba] -->|port 80 node worker|B(Ingress)3 B --> C{service}4 C --> D[pod]5 C --> E[pod]
Ingress masuk dalam katagori layer 7 jadi http/https aja. jika kalian mau custom port bisa memilih opsi menggunakan NodePort atau LoadBalancer detail bisa dilihat disini, oke langgsung masuk kepembahasan setup ingress menggunakan traefik di kubernetes :
- Create namespace
kubectl create ns ingress
- Create file RBAC
rbac-traefik.yaml
1---2kind: ClusterRole3apiVersion: rbac.authorization.k8s.io/v1beta14metadata:5 name: traefik-ingress-controller6rules:7 - apiGroups:8 - ""9 resources:10 - services11 - endpoints12 - secrets13 verbs:14 - get15 - list16 - watch17 - apiGroups:18 - extensions19 resources:20 - ingresses21 verbs:22 - get23 - list24 - watch25 - apiGroups:26 - extensions27 resources:28 - ingresses/status29 verbs:30 - update31---32kind: ClusterRoleBinding33apiVersion: rbac.authorization.k8s.io/v1beta134metadata:35 name: traefik-ingress-controller36roleRef:37 apiGroup: rbac.authorization.k8s.io38 kind: ClusterRole39 name: traefik-ingress-controller40subjects:41- kind: ServiceAccount42 name: traefik-ingress-controller43 namespace: ingress
kubectl apply -f rbac-traefik.yaml
- Create file DaemonSet
daemonset-traefik.yaml
1---2apiVersion: v13kind: ServiceAccount4metadata:5 name: traefik-ingress-controller6 namespace: ingress7---8kind: DaemonSet9apiVersion: apps/v110metadata:11 name: traefik-ingress-controller12 namespace: ingress13 labels:14 k8s-app: traefik-ingress-lb15spec:16 selector:17 matchLabels:18 k8s-app: traefik-ingress-lb19 name: traefik-ingress-lb20 template:21 metadata:22 labels:23 k8s-app: traefik-ingress-lb24 name: traefik-ingress-lb25 spec:26 serviceAccountName: traefik-ingress-controller27 terminationGracePeriodSeconds: 6028 containers:29 - image: traefik:v1.730 name: traefik-ingress-lb31 ports:32 - name: http33 containerPort: 8034 hostPort: 8035 - name: admin36 containerPort: 808037 hostPort: 808038 securityContext:39 capabilities:40 drop:41 - ALL42 add:43 - NET_BIND_SERVICE44 args:45 - --api46 - --kubernetes47 - --logLevel=INFO48---49kind: Service50apiVersion: v151metadata:52 name: traefik-ingress-service53 namespace: ingress54spec:55 selector:56 k8s-app: traefik-ingress-lb57 ports:58 - protocol: TCP59 port: 8060 name: web61 - protocol: TCP62 port: 808063 name: admin
kubectl apply -f daemonset-traefik.yaml
Done, service ingress with traefik kalian sudah selesai, saatnya kita expose service aplikasi kita
ingress yaml
1apiVersion: extensions/v1beta12kind: Ingress3metadata:4 name: aplikasi-15 namespace: production6 annotations:7 kubernetes.io/ingress.class: traefik8spec:9 rules:10 - host: {domain kamu}11 http:12 paths: /13 - backend:14 serviceName: {nama service}15 servicePort: {port service}
kamu juga bisa akses dashboard traefik
- Dashboard traefik {IP_NODE-WORKER}:8080
finish, congratulations :) #cheers