Skip to content

Last updated at 2025-03-23 Posted at 2025-03-22

CiliumのIngressの使い方

目次

概要

前回インストールしたCiliumのIngressの使ってみます
自宅サーバーでの使用を想定し、1つのIPアドレスを使い回すことができるように、loadbalancerModeはsharedにしています

環境

  • ciliumの手順でインストール済
  • loadbalancerModeはshared
  • TLS証明書についてはcert-managerの手順でインストール済

サンプルアプリケーションのデプロイ

まず、Ingressを試すためのアプリケーションをデプロイします
以下のマニフェストと同様にnginx2もデプロイします

sh
kubectl create ns nginx1
mkdir -p ~/yaml/nginx
cat <<EOF > ~/yaml/nginx/nginx1.yml
apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-nginx1
  namespace: nginx1
data:
  index.html: |
    <!DOCTYPE html>
    <html>
    <head>
        <title>Welcome</title>
    </head>
    <body>
        <h1>Welcome to My Custom Nginx1!</h1>
    </body>
    </html>
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: nginx1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        volumeMounts:
        - name: html-volume
          mountPath: /usr/share/nginx/html
      volumes:
      - name: html-volume
        configMap:
          name: custom-nginx1
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: nginx1
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      name: http
      port: 80
      targetPort: 80
  type: ClusterIP
EOF
kubectl apply -f ~/yaml/nginx/nginx1.yml

Ingressのデプロイ

TLS証明書が既に準備できているものとして進めます

log
kcm1:~$ kubectl get secret -n nginx1
NAME                     TYPE                DATA   AGE
wildcard-4dev5-com-tls   kubernetes.io/tls   2      12d

こちらもnginx1,2のIngressをデプロイします

sh
cat <<EOF > ~/yaml/nginx/ingress1.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx
  namespace: nginx1
spec:
  defaultBackend:
    service:
      name: nginx
      port:
        name: http
  ingressClassName: cilium
  rules:
  - host: nginx1.4dev5.com
    http:
      paths:
      - backend:
          service:
            name: nginx
            port:
              name: http
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - nginx1.4dev5.com
    secretName: wildcard-4dev5-com-tls
EOF
kubectl apply -f ~/yaml/nginx/ingress1.yml

loadbalancerModeがsharedの場合、Ingress ControllerのExternal-IPがIngressに割当てされます

log
kcm1:~$ kubectl get svc -n kube-system cilium-ingress
NAME             TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
cilium-ingress   LoadBalancer   10.99.25.123   192.168.0.9   80:32545/TCP,443:31222/TCP   12d
kcm1:~$ kubectl get ingress -A
NAMESPACE   NAME        CLASS    HOSTS              ADDRESS       PORTS     AGE
nginx1      nginx       cilium   nginx1.4dev5.com   192.168.0.9   80, 443   10m
nginx2      nginx       cilium   nginx2.4dev5.com   192.168.0.9   80, 443   31s

アクセス確認

log
kcm1:~$ curl https://nginx1.4dev5.com
<!DOCTYPE html>
<html>
<head>
    <title>Welcome</title>
</head>
<body>
    <h1>Welcome to My Custom Nginx1!</h1>
</body>
</html>
kcm1:~$ curl https://nginx2.4dev5.com
<!DOCTYPE html>
<html>
<head>
    <title>Welcome</title>
</head>
<body>
    <h1>Welcome to My Custom Nginx2!</h1>
</body>
</html>