ใน web server เราสามารถเพิ่ม HTTP response header เพื่อควบคุมพฤติกรรมของ web application หรือบางครั้งเป็นมาตรฐานของฝั่ง security ที่ต้องการให้ web server response http header ที่ต้องการออกมาด้วย
สำหรับ Ingress Controller เราสามารถปรับแต่ง HTTP response header ผ่าน annotation ของแต่ละ Ingress resource ได้เอง เช่นถ้าต้องการให้ Ingress resource นั้น เพิ่ม X-Frame-Options: SAMEORIGIN ออกมาใน HTTP response header ด้วยเราสามารถกำหนด annotation ให้กับ Ingress resource ได้ตามตัวอย่าง
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: 'more_set_headers "X-Frame-Options:
SAMEORIGIN";'
name: ing-svc01
namespace: default
spec:
rules:
- host: www.example.com
http:
paths:
- backend:
serviceName: front
servicePort: 80
path: /
pathType: ImplementationSpecific
curl เป็น command นึงที่ใช้บ่อยมากทั้ง download ไฟล์ รวมถึง verify และ debug การทำงานของ web application
หลายวันก่อนมี app มาขึ้นใน Kubernetes cluster ก็มีการคุยถึงวิธีที่จะ expose service ออกไปนอก cluster ซึ่งถ้าเป็น HTTP/HTTPS ก็แนะนำให้ใช้ Ingress นี่ล่ะง่ายดี ถ้ายังไม่ได้จด domain ก็บอกวิธี test ไปว่าลองใช้ curl ตามนี้
$ curl -H "Host: my.domain.com" http://<worker node ip or LB vip>
สมมติ app เรามีชื่อ domain คือ my.domain.com ถ้าอยากจะทดสอบแบบเร็วๆว่า Ingress ทำงานได้ก็สามารถใช้คำสั่ง curl โดยระบุ flag -H ตามด้วย string Host: <ชื่อ host> แล้วก็ชี้ไปที่ IP ของ endpoint เช่น VIP ของ Load balance หรือ Worker node IP
วันนี้ทีม dev มาถามว่า set SSL ของ workload ที่ไหนดี เราก็เสนอไปว่าทำใน Ingress ก็ได้ set เสร็จแล้วก็ test แบบเดิม แต่คราวนี้เปลี่ยน endpoint เป็น https:// ผลคือ Ingress ไม่ไปเอา Certificate ที่เราเตรียมไว้ให้ แต่ดันไปเอา default certificate ของ nginx ingress controller มาใช้แทน
หลังหาอยู่นานก็ไปเจอว่าถ้าหากจะ test https command ที่ถูกต้องคือ
$ curl https://my.domain.com --resolve 'my.domain.com:443:<worker node ip or LB vip>'