LoginSignup
0
0

More than 1 year has passed since last update.

kubernetes: minikubeで立ち上げたIngressにアクセスできなかった問題を解決した

Last updated at Posted at 2023-02-11

はじめに

ローカルでkubernetesの勉強をしており、localhostからIngressへのアクセスができない問題が発生していた。

解決するまでにかなりの時間を要したので備忘録としてここに残しておこうと思った。

環境

  • os: macOS
  • minikube version: v1.29.0
  • driver: Docker

結論

minikubeサーバーを踏み台にしてポートフォワードすることでブラウザでIngress経由でアクセスできた。

どういった問題が起きたか

k8s docs: Set up Ingress on Minikube with the NGINX Ingress Controllerを参考に、
以下のような構成でリソースを立ち上げようとしていた。

image.png
引用: https://kubernetes.io/ja/docs/concepts/services-networking/ingress/

手順は以下

  1. 以下のようなリソース.ymlを作成
ingress.yml
apiVersion: v1
kind: Service
metadata:
  name: web-svc
spec:
  selector:
    app: web
    env: practice
  ports:
  - port: 80
    targetPort: 80

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web
      env: practice
  template:
    metadata:
      name: nginx
      labels:
        app: web
        env: practice
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.2-alpine
        ports:
          - containerPort: 80

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: frontend
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - host: hogehoge.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-svc
            port:
              number: 80
  1. リソースを立ち上げる
kubectl apply -f ingress.yml
  1. リソース状況の確認
 kubectl get ing,svc,deploy  
NAME                                 CLASS    HOSTS           ADDRESS        PORTS   AGE
ingress.networking.k8s.io/frontend   <none>   hogehoge.local   XXX.XXX.XX.X   80      101m

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   42h
service/web-svc      ClusterIP   10.108.173.128   <none>        80/TCP    106m

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx   2/2     2            2           106m
  1. ホストマシン(Docker Driver)のetc/hostsに以下を追加
XXX.XX.X.XX hogehoge.local

XXX.XX.X.XXは、minikube ipで取得したIPアドレス

これでhttp://hogehoge.local/ にアクセスすればいけるぞ!

しかし、、

image.png

アクセスに失敗した、、

この後数時間試行錯誤を繰り返すも問題の解決に至らず、、

解決策: minikubeにsshポートフォワーディングをしてアクセスできるようにした

minikube sshでminikube内に入ってcurl hogehoge.localを実行してみると、、

docker@minikube:~$ curl hogehoge.local
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>

どうやら、minikube内では、Ingress経由でnginxにアクセスできているみたい

それならいっそminikubeにポートフォワーディングしてアクセスしちゃえばいいんじゃねと思い、以下の記事を参考に実施した。

  1. minikubeのssh-host情報を取得する
% minikube ssh-host
[127.0.0.1]:52606 ssh-rsa AAA....
  1. minikubeのssh秘密キーのパスを取得する
~/$ minikube ssh-key
/home/hoge/.minikube/machines/minikube/id_rsa
  1. 以下のコマンドを実施してsshポートフォワードを実施

1, 2で取得したssh-host情報のポート番号、秘密キーパス、host名を書き換えて実行

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -N docker@127.0.0.1 -p 52606 -i /home/hoge/.minikube/machines/minikube/id_rsa -L 30000:hogehoge.local:80

http://localhost:30000 にアクセスすると、、

image.png

やったーーー!!これで無事アクセスできました🎉🎉🎉

おわりに

コンテナのネットワーク周りはやっぱり手こずる、、、

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