フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

GKE IngressでCustom Headerを少し触ってみる

f:id:lirlia:20210908005338p:plain

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-Typetest-my-content-typeになってますね〜。

動的なカスタムヘッダも作成可能とのことですが、はじめから用意されているものしかダメらしいので以下を確認しましょう。