Hi sobat, Sebelumnya kita sudah bahas disini sekarang saatnya deploy ingress menggunakan nginx, kenapa kita memilih balik lagi ke nginx yaa salah satunya banyak feature yang masih dipake untuk service apps kita. semua feature tersebut kita bisa set melalui configmap dan annotations.
Configmap
list configmap bisa lihat disini
Annotations
list annotations bisa lihat disini
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 nginx dikubernetes (baremetal):
- Create file mandatory (NS, RBAC, Configmap, Deployment)
mandatory.yaml
1apiVersion: v12kind: Namespace3metadata:4 name: ingress-nginx5 labels:6 app.kubernetes.io/name: ingress-nginx7 app.kubernetes.io/part-of: ingress-nginx89---1011kind: ConfigMap12apiVersion: v113metadata:14 name: nginx-configuration15 namespace: ingress-nginx16 labels:17 app.kubernetes.io/name: ingress-nginx18 app.kubernetes.io/part-of: ingress-nginx1920---21kind: ConfigMap22apiVersion: v123metadata:24 name: tcp-services25 namespace: ingress-nginx26 labels:27 app.kubernetes.io/name: ingress-nginx28 app.kubernetes.io/part-of: ingress-nginx2930---31kind: ConfigMap32apiVersion: v133metadata:34 name: udp-services35 namespace: ingress-nginx36 labels:37 app.kubernetes.io/name: ingress-nginx38 app.kubernetes.io/part-of: ingress-nginx3940---41apiVersion: v142kind: ServiceAccount43metadata:44 name: nginx-ingress-serviceaccount45 namespace: ingress-nginx46 labels:47 app.kubernetes.io/name: ingress-nginx48 app.kubernetes.io/part-of: ingress-nginx4950---51apiVersion: rbac.authorization.k8s.io/v1beta152kind: ClusterRole53metadata:54 name: nginx-ingress-clusterrole55 labels:56 app.kubernetes.io/name: ingress-nginx57 app.kubernetes.io/part-of: ingress-nginx58rules:59 - apiGroups:60 - ""61 resources:62 - configmaps63 - endpoints64 - nodes65 - pods66 - secrets67 verbs:68 - list69 - watch70 - apiGroups:71 - ""72 resources:73 - nodes74 verbs:75 - get76 - apiGroups:77 - ""78 resources:79 - services80 verbs:81 - get82 - list83 - watch84 - apiGroups:85 - ""86 resources:87 - events88 verbs:89 - create90 - patch91 - apiGroups:92 - "extensions"93 - "networking.k8s.io"94 resources:95 - ingresses96 verbs:97 - get98 - list99 - watch100 - apiGroups:101 - "extensions"102 - "networking.k8s.io"103 resources:104 - ingresses/status105 verbs:106 - update107108---109apiVersion: rbac.authorization.k8s.io/v1beta1110kind: Role111metadata:112 name: nginx-ingress-role113 namespace: ingress-nginx114 labels:115 app.kubernetes.io/name: ingress-nginx116 app.kubernetes.io/part-of: ingress-nginx117rules:118 - apiGroups:119 - ""120 resources:121 - configmaps122 - pods123 - secrets124 - namespaces125 verbs:126 - get127 - apiGroups:128 - ""129 resources:130 - configmaps131 resourceNames:132 # Defaults to "<election-id>-<ingress-class>"133 # Here: "<ingress-controller-leader>-<nginx>"134 # This has to be adapted if you change either parameter135 # when launching the nginx-ingress-controller.136 - "ingress-controller-leader-nginx"137 verbs:138 - get139 - update140 - apiGroups:141 - ""142 resources:143 - configmaps144 verbs:145 - create146 - apiGroups:147 - ""148 resources:149 - endpoints150 verbs:151 - get152153---154apiVersion: rbac.authorization.k8s.io/v1beta1155kind: RoleBinding156metadata:157 name: nginx-ingress-role-nisa-binding158 namespace: ingress-nginx159 labels:160 app.kubernetes.io/name: ingress-nginx161 app.kubernetes.io/part-of: ingress-nginx162roleRef:163 apiGroup: rbac.authorization.k8s.io164 kind: Role165 name: nginx-ingress-role166subjects:167 - kind: ServiceAccount168 name: nginx-ingress-serviceaccount169 namespace: ingress-nginx170171---172apiVersion: rbac.authorization.k8s.io/v1beta1173kind: ClusterRoleBinding174metadata:175 name: nginx-ingress-clusterrole-nisa-binding176 labels:177 app.kubernetes.io/name: ingress-nginx178 app.kubernetes.io/part-of: ingress-nginx179roleRef:180 apiGroup: rbac.authorization.k8s.io181 kind: ClusterRole182 name: nginx-ingress-clusterrole183subjects:184 - kind: ServiceAccount185 name: nginx-ingress-serviceaccount186 namespace: ingress-nginx187188---189190apiVersion: apps/v1191kind: Deployment192metadata:193 name: nginx-ingress-controller194 namespace: ingress-nginx195 labels:196 app.kubernetes.io/name: ingress-nginx197 app.kubernetes.io/part-of: ingress-nginx198spec:199 replicas: 3200 selector:201 matchLabels:202 app.kubernetes.io/name: ingress-nginx203 app.kubernetes.io/part-of: ingress-nginx204 template:205 metadata:206 labels:207 app.kubernetes.io/name: ingress-nginx208 app.kubernetes.io/part-of: ingress-nginx209 annotations:210 prometheus.io/port: "10254"211 prometheus.io/scrape: "true"212 spec:213 # wait up to five minutes for the drain of connections214 terminationGracePeriodSeconds: 300215 serviceAccountName: nginx-ingress-serviceaccount216 nodeSelector:217 kubernetes.io/os: linux218 containers:219 - name: nginx-ingress-controller220 image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.29.0221 args:222 - /nginx-ingress-controller223 - --configmap=$(POD_NAMESPACE)/nginx-configuration224 - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services225 - --udp-services-configmap=$(POD_NAMESPACE)/udp-services226 - --publish-service=$(POD_NAMESPACE)/ingress-nginx227 - --annotations-prefix=nginx.ingress.kubernetes.io228 securityContext:229 allowPrivilegeEscalation: true230 capabilities:231 drop:232 - ALL233 add:234 - NET_BIND_SERVICE235 # www-data -> 101236 runAsUser: 101237 env:238 - name: POD_NAME239 valueFrom:240 fieldRef:241 fieldPath: metadata.name242 - name: POD_NAMESPACE243 valueFrom:244 fieldRef:245 fieldPath: metadata.namespace246 ports:247 - name: http248 containerPort: 80249 protocol: TCP250 - name: https251 containerPort: 443252 protocol: TCP253 livenessProbe:254 failureThreshold: 3255 httpGet:256 path: /healthz257 port: 10254258 scheme: HTTP259 initialDelaySeconds: 10260 periodSeconds: 10261 successThreshold: 1262 timeoutSeconds: 10263 readinessProbe:264 failureThreshold: 3265 httpGet:266 path: /healthz267 port: 10254268 scheme: HTTP269 periodSeconds: 10270 successThreshold: 1271 timeoutSeconds: 10272 lifecycle:273 preStop:274 exec:275 command:276 - /wait-shutdown277278---279280apiVersion: v1281kind: LimitRange282metadata:283 name: ingress-nginx284 namespace: ingress-nginx285 labels:286 app.kubernetes.io/name: ingress-nginx287 app.kubernetes.io/part-of: ingress-nginx288spec:289 limits:290 - min:291 memory: 90Mi292 cpu: 100m293 type: Container
Create file service
service-nginx.yaml
1apiVersion: v12kind: Service3metadata:4 name: ingress-nginx5 namespace: ingress-nginx6 labels:7 app.kubernetes.io/name: ingress-nginx8 app.kubernetes.io/part-of: ingress-nginx9spec:10 type: NodePort11 ports:12 - name: http13 port: 8014 targetPort: 8015 protocol: TCP16 - name: https17 port: 44318 targetPort: 44319 protocol: TCP20 selector:21 app.kubernetes.io/name: ingress-nginx22 app.kubernetes.io/part-of: ingress-nginx
example ingress yaml
1apiVersion: networking.k8s.io/v1beta12kind: Ingress3metadata:4 name: nginx-configuration-snippet5 annotations:6 nginx.ingress.kubernetes.io/configuration-snippet: |7 more_set_headers "Request-Id: $req_id";8spec:9 rules:10 - host: {domain kamu}11 http:12 paths: /13 - backend:14 serviceName: {nama service}15 servicePort: {port service}
finish, congratulations :) #cheers