🐥

nginx ingress controller導入@OCI

2022/10/16に公開

概要

以下をやった自分用備忘録です

  • OCIのコンピュートに3node立てて、そこでkubeadm使ってクラスタ作成
  • nginx ingress controller導入(Nodeportです)

やったこと

クラスタ作成

基本的に以下を参考にさせていただきました。
https://blog.potproject.net/2021/06/01/oracle-cloud-kubernetes

ただ、注意点として以下がありました。

  • Block Volumeの無料枠が100GBっぽくて、3node立てるとBoot Volumeで150GB持っていかれて2円くらいかかります
  • kubeadm joinする前にセキュリティルールのイングレスに諸々追加が必要でした(iptablesで追加したやつら)

Nginx Ingress Controllerの導入

以下の公式ドキュメント参考にしました
https://kubernetes.github.io/ingress-nginx/deploy/baremetal/

実際に打ったコマンドは上にリンクのある以下のドキュメントにあります
https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal-clusters

デプロイは大体以下の感じです

## ingress controller作る
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.4.0/deploy/static/provider/baremetal/deploy.yaml

## テスト用のDeployment/Service/Ingress作成
cat << 'EOF' > deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: web-container
        image: nginx
        ports:
          - containerPort: 80
EOF

cat << 'EOF' > service.yaml
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
  labels:
    app: myapp-service
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: myapp
  type: ClusterIP
EOF

cat << 'EOF' > ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp
spec:
  ingressClassName: "nginx"
  rules:
  - host: "myapp.com"
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80
EOF

## デプロイ
kubectl apply -f deployment.yaml -f service.yaml -f ingress.yaml

## 確認
kubectl get po,svc,ingress

その上で以下で確認します

## ingress-nginx-controllerの80側に対応するPORT確認
kubectl get svc -n ingress-nginx

## ingress-nginx-controllerのpodが動いているnodeのIPを確認
kubectl get po -n ingress-nginx
kubectl get pod/ingress-nginx-controller-***-*** \
-n ingress-nginx \
-o=jsonpath='{.status.hostIP}'

## curlしてみる(nginxのいつものが出て来ればOK)
curl -v http://<IP>:<PORT> -H "Host: myapp.com"

まとめ

  • ingress周りの挙動の理解につながってよかった(LBの方はOKEでやってみようかなと思ってます)
  • OCIの価格設定安い

参考

Discussion