LoginSignup
0
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

Kong Ingress Controller環境でKong GatewayのWorkspaceを使う

Last updated at Posted at 2024-06-09

Kong Ingress Controller(以下KIC)を使ってIngress経由でService/Routeを作成すると、設定を意識していなければ基本的にはdefaultのWorkspaceに作成されていく。
image.png
ここではKIC利用時にdefaultとは別に意図したWorkspaceにKong Gatewayのリソースを展開する方法を確認する。

KICでWorkspaceを使う際の前提知識

有益なドキュメントがあまり見つからず、こちらのドキュメントくらいしか見当たらなかった。
利用に関する条件は以下となる。

  • KICをDBありモードでデプロイしている必要あり
  • Workspace1つにつきKICのインスタンスが1つ必要。
  • WorkspaceごとのKICのインスタンスを使い分けるために、KICのインスタンス毎にIngressClassが必要

また設定方法としてはHelmのvalues.yamlに以下を記載する。

controller:
  ingressController:
    env:
      watch_namespace: <Namespace名>
      kong_workspace: <Workspace名>

watch_namespaceは省略可能で、省略した場合は全Namespaceが対象となる。

検証

検証のシナリオとして、以下のようなシナリオで検証する。

  • Namespacemy-httpbinにデプロイしたIngressはWorkspacehttpbin-workspaceに紐づける
  • その他のNamespaceにデプロイしたものはWorkspacedefaultに紐づける

検証するにあたり、事前にKICとKong Gatewayをデプロイしておき、そこに追加する形でKICをデプロイする。
事前に用意するKICとKong Gatewayの説明は省略するが、手順が必要な人はこちらを参照するとよい。

最初に追加のKICを指定するためのIngressClassを作成する。

cat << EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: kic-ws
spec:
  controller: ingress-controllers.konghq.com/kong
EOF

次に追加のKICのデプロイに使うHelmのvalues.yamlを作成する。

cat <<EOF > ./kic-workspace.yaml
deployment:
  test:
    enabled: false
controller:
  enabled: true
  ingressController:
    installCRDs: false
    ingressClass: kic-ws
    ingressClassAnnotations: kic-ws
    gatewayDiscovery:
      enabled: false
    env:
      publish_service: kong/kong-aws-kong-proxy
      watch_namespace: my-httpbin
      kong_workspace: httpbin-workspace
      kong_admin_tls_skip_verify: true
      kong_admin_token:
        valueFrom:
          secretKeyRef:
            key: password
            name: kong-config-secret
      kong_admin_url: https://kong-aws-kong-admin.kong.svc:8444
gateway:
  enabled: false
  deployment:
    kong:
      enabled: false
  admin:
    enabled: false
EOF

controller.ingressControllerセクションを少し説明する。
ingressClassはIngress Controllerが参照するIngressClassであり、これを指定することでIngress側でコントローラの使い分けが出来るようになる。
gatewayDiscovery.enabled: falseはKong GatewayのAdmin APIのアドレスを探すのにkong_admin_urlを使うために指定している。
詳しくはThe gatewayDiscovery sectionを参照のこと。
publish_serviceはKong GatewayのProxyのServiceを指定していて、<Namespace名>/<Service名>で指定する。これがないとエラーになる。

作成したvalues.yamlを使ってKICをデプロイする。

helm upgrade -i kic-ws kong/ingress -f kic-workspace.yaml --debug -n kong

デプロイが完了すると、自動的に指定したWorkspaceが作成される。
image.png
続いてIngressをデプロイする。ここではhttpbinをサンプルとしてデプロイした。
IngressIngressClassに先程作成したIngressClassを指定するのを忘れないこと。

my-httpbin.yaml(クリックして表示)
my-httpbin.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-httpbin
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: my-httpbin
  replicas: 1
  template:
    metadata:
      labels:
        app.kubernetes.io/name: my-httpbin
    spec:
      containers:
      - image: kennethreitz/httpbin
        name: my-httpbin
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-httpbin
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  type: ClusterIP
  selector:
    app.kubernetes.io/name: my-httpbin
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-httpbin
  annotations:
    cert-manager.io/issuer: my-httpbin-issuer
    kubernetes.io/tls-acme: "true"
spec:
  ingressClassName: kic-ws
  rules:
    - host: my-httpbin.eks.hogehoge.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name:  my-httpbin
                port:
                  number: 80
  tls:
  - secretName: my-httpbin-general-tls
    hosts:
    - my-httpbin.eks.hogehoge.com
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: my-httpbin-issuer
spec:
  acme:
    email: mymail@hogehoge.com
    privateKeySecretRef:
      name: my-httpbin-acme-key
    server: https://acme-v02.api.letsencrypt.org/directory
    solvers:
    - http01:
        ingress:
          class: kic-ws
kubectl create ns my-httpbin
kubectl apply -f ./my-httpbin.yaml -n 

デプロイが完了するとKong Managerの方から作成したWorkspaceの方にService/Routeが作成されていることが確認できる。
image.png

触ってみると問題なく使えることも分かる。

$ curl my-httpbin.eks.hogehoge.com/ip
{
  "origin": "192.168.59.131"
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0