GKEのIngress=外部HTTP(S)ロードバランサを触ってカスタムヘッダの追加や上書きの挙動を確認してみます。
使用したのは以下のmanifestです。
apiVersion: v1 kind: Service metadata: name: web annotations: cloud.google.com/neg: '{"ingress": true}' cloud.google.com/backend-config: '{"ports": {"http":"web"}}' spec: type: NodePort ports: - name: http port: 80 protocol: TCP targetPort: 8080 selector: app: web --- # Source: deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: web labels: app: web spec: replicas: 1 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: web image: mendhak/http-https-echo:18 ports: - containerPort: 8080 --- # Source: ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: web annotations: kubernetes.io/ingress.class: "gce" spec: rules: - http: paths: - pathType: ImplementationSpecific backend: service: name: web port: number: 80 --- # Source: backend.yaml apiVersion: cloud.google.com/v1 kind: BackendConfig metadata: name: web spec: customRequestHeaders: headers: - "CloudFront-Viewer-Country:{client_region}" - "Content-Type: test-my-content-type"
やりたいこと
- カスタムヘッダの追加
- カスタムヘッダの上書き(Content-Typeで試します)
手順
kubectl apply -f uenoyatu.yaml # IngressがIPを発行するまで1分ほどかかるので待つ ADDR=$(kubectl get ingress web --no-headers | awk '{print $4}') # Ingressがリクエストを転送するまで404になるので待つ curl -H "Content-Type: text/html; charset=UTF-8" $ADDR
確認
とりあえず通信してみる。cloudfront-viewer-country
がついてきてますね。
❯ curl $ADDR { "path": "/", "headers": { "host": "35.244.208.76", "user-agent": "curl/7.64.1", "accept": "*/*", "x-cloud-trace-context": "0cd152f84ef6816d63c4d3e35c5cbeb3/4040280039831189689", "via": "1.1 google", "x-forwarded-for": "114.165.43.7, 35.244.208.76", "x-forwarded-proto": "http", "connection": "Keep-Alive", "cloudfront-viewer-country": "JP", "content-type": "test-my-content-type" },
ヘッダをつけてみる
❯ curl -H "Content-Type: text/html; charset=UTF-8" $ADDR { "path": "/", "headers": { "host": "35.244.208.76", "user-agent": "curl/7.64.1", "accept": "*/*", "content-type": "test-my-content-type", "x-cloud-trace-context": "7c17ed493f4df034744c20b8d5273f54/15365631892466060911", "via": "1.1 google", "x-forwarded-for": "114.165.43.7, 35.244.208.76", "x-forwarded-proto": "http", "connection": "Keep-Alive", "cloudfront-viewer-country": "JP" },
変わらずContent-Type
がtest-my-content-type
になってますね〜。
動的なカスタムヘッダも作成可能とのことですが、はじめから用意されているものしかダメらしいので以下を確認しましょう。