Fumi2kick ScrapBook

kubernetes top へ戻る

kubernetes で NGINX Ingress を利用する。

記述日

前提環境

Ingress とは

自分のところでのユースケース

NGINX Ingress を使う

インストール

$ helm install --name nginx-ingress stable/nginx-ingress --namespace (展開するネームスペース)

helm でインストールすると nginx-ingress-default-backendnginx-ingress-controller の 2 つの pod が起動する。前者はアクセス URL が無かったときの 404 を返すためのダミー HTTP サービスで、後者が L7 ロードバランサー。

helm から起動した ingress-controller は service で見ると LoadBalancer として登録されており、ホストには任意の児童割り当てポートが割り振られている。要注意ポイント。 前段に proxy がある場合はこのポートに対してフォワードする。

ポートを 80,443 にするには helm に因らず自分で yaml を書いて起動すればよさそうだが、今回はそこまでやる必要は無かったので未確認。

使い方

サービスディスカバリの作成

イングレスがサービス(pods)を見つけるための名前設定を行う。

pod のセレクタと、アクセスポート、サービス名を定義。NodePort type で作成。

apiVersion: v1
kind: Service
metadata:
  name: (サービス名)
  namespace: (名前空間)
spec:
  type: NodePort
  ports:
  - port: (コンテナのポート)
    protocol: TCP
    targetPort: (コンテナのポート)
  selector:
    (pod セレクトタグ)

kubectl get service でできたことを確認。

イングレスの作成

http を受けてサービスへ繋ぐイングレスの作成。 L7 ロードバランサなので、受け取る url やパスによってバックグラウンドの投げ先をわけることができる。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: (イングレス名)
  namespace: (名前空間)
spec:
  rules:
  - host: (受け取る URL)
    http:
      paths:
      - path: /(URL のパス)
        backend:
          serviceName: (サービス名)
          servicePort: (サービスのポート)

kubectl get ingresses.extensions でできたことを確認。

おまけ

helm install でエラーが出たとき

Error: release nginx-ingress failed: namespaces "mofgao" is forbidden: User "system:serviceaccount:kube-system:default" cannot get resource "namespaces" in API group "" in the namespace "mofgao"

helm がインストールする tiller のロール(権限)が足りない。

Teller service を削除して tiller アカウントを作成。

kubectl delete deployments.apps --namespace=kube-system tiller-deploy

kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
clusterrolebinding.rbac.authorization.k8s.io/tiller-cluster-rule created
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

helm init --upgrade