본문 바로가기

개발하자

Minikube를 사용하는 Windows Home 브라우저에서 Kubernetes Ingress에 액세스할 수 없습니까?

반응형

Minikube를 사용하는 Windows Home 브라우저에서 Kubernetes Ingress에 액세스할 수 없습니까?

나는 그것의 IP를 사용하여 브라우저의 Kubernetes Ingress에 액세스할 수 없다는 문제에 직면해 있다. 나는 윈도우 10 홈에 K8s와 미니큐브를 설치했다.

나는 이 공식 문서를 따르고 있다

  1. 먼저 Minikube에서 아래 명령을 실행하여 배포를 생성했습니다.

    kubectl 배포 웹 생성 --image=gcr.io/google-samples/hello-app:1.0

아래 이미지에서 볼 수 있는 배포가 생성됩니다:

  1. 다음으로, 위에서 만든 배포를 노출했습니다. 이를 위해 다음 명령을 실행했습니다.

    kubectl 노출 배포 웹 --type=NodePort --port=8080

이로 인해 다음 명령을 실행하여 확인할 수 있는 서비스가 생성되었습니다:

kubectl get service web

서비스의 스크린샷은 다음과 같습니다:

  1. 이제 다음 명령을 실행하여 브라우저에서 서비스를 방문할 수 있습니다:

    미니큐브 서비스 웹

아래 스크린샷에서 브라우저에서 볼 수 있습니다.

  1. 그런 다음 다음 다음 명령을 실행하여 입력을 만들었습니다:

    쿠벡틀 적용 -f

그런데 입력 yaml 코드는 다음과 같습니다:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    spec:
      rules:
        - host: hello-world.info
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: web
                    port:
                      number: 8080

입력이 생성되고 다음 명령을 실행하여 확인할 수 있습니다:

kubectl get ingress

이에 대한 스크린샷은 다음과 같습니다:

입력 IP는 다음과 같이 나열됩니다. 즉, 브라우저에서 열리면 열리지만 안타깝게도 그렇지 않습니다. 사이트에 연결할 수 없는 것으로 표시됩니다. 아래 스크린샷을 참조하십시오.

enter image description here

뭐가 문제야. 그것에 대한 해결책을 제시해 주시겠습니까?

또한 etc\hosts 파일에 매핑을 추가했습니다.

192.168.49.2 hello-world.info

그리고 나서 나는 브라우저에서 hello-world.info 도 열어보려 했지만 실패했다.

아래 사진에서 나는 IP 주소 192.168.49.2로 ping을 했다. etc\hosts 매핑이 올바른 것으로 표시됩니다:

enter image description here

나는 또한 미니큐브립과 토에 컬을 했는데 둘 다 타임아웃이 된다. 아래 이미지 참조:

에서는 다음과 같은 세부 정보를 제공합니다:

Name:                     web
Namespace:                default
Labels:                   app=web
Annotations:              <none>
Selector:                 app=web
Type:                     NodePort
IP:                       10.100.184.92
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  31880/TCP
Endpoints:                172.17.0.4:8080
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

는 다음과 같은 출력을 제공합니다:

Name:             example-ingress
Namespace:        default
Address:          192.168.49.2
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host              Path  Backends
  ----              ----  --------
  hello-world.info
                    /   web:8080   172.17.0.4:8080)
Annotations:        nginx.ingress.kubernetes.io/rewrite-target: /$1
Events:             <none>

도와주세요. 감사해요.




이것들만이 필요한 것은 아니다

minikube ssh 
sudo ip link set docker0 promisc on 

minikube addons enable ingress
minikube addons enable ingress-dns

하지만 나는 또한 노력할 것이다:

minikube delete 

처음부터 시작해야 합니다. 특히 이전에 무언가를 배포한 경우에는 더욱 그렇습니다.




이 주석을 제거해 보십시오.

다음 주석을 추가합니다:

annotations:
    nginx.ingress.kubernetes.io/default-backend: ingress-nginx-controller
    kubernetes.io/ingress.class: nginx
    ## tells ingress to check for regex in the config file
    nginx.ingress.kubernetes.io/use-regex: "true"

또한 경로를 다음과 같이 업데이트하십시오:

 - path: /?(.*) ## instead of just '/'
   backend:
     serviceName: web
     servicePort: 8080



나는 당신이 세부사항을 확인하면 당신이 올바른 IP를 찾을 수 있을 것이라고 믿는다

kubectl describe ingress example-ingress

에 대한 자세한 내용은 를 참조하십시오

만약 위의 것들이 이것을 시도하는 데 도움이 되지 않는다면. 이것을 확인하십시오

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    # If the class annotation is not specified it defaults to "gce".
    kubernetes.io/ingress.class: "gce"
spec:
  rules:
  - http:
      paths:
      - path: /*
        backend:
          serviceName: test
          servicePort: 1111



OP와 동일한 문제가 있으며 아래의 ingress.yaml을 공유하여 에서만 작동합니다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: frontend-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  defaultBackend:
    service:
      name: default-http-backend
      port:
        number: 80
  rules:
    - host: myapp-com # domain (i.e. need to change host table)
      http:
        paths: # specified path below, only be working when there is more than 1 path; If only having 1 path, it's always using / as path
          - path: /
            pathType: Prefix
            backend:
              service: 
                name: frontend-service # internal service
                port: 
                  number: 8080 # port number that internal service exposes
          - path: /e($|/)(.*)
            pathType: Prefix
            backend:
              service: 
                name: express-service # internal service
                port: 
                  number: 3000 # port number that internal service exposes




제 경우(win10 + minikeube + ingress minikeube addon) 다음과 같은 이점이 있습니다:

  1. 파일에서 사용자 지정 도메인 IP를 127.0.01로 설정합니다(예: 줄 추가)
  2. 입력 포드 이름 가져오기:
  3. 포트 전달을 시작합니다. 여기서 입력 포드 이름으로 대체해야 합니다.
  4. 모든 브라우저에서 사용자 지정 도메인의 입력 사용(포트 포워딩이 활성화된 경우에만 해당)



나도 같은 문제에 있었고, 내가 찾은 가장 쉬운 해결책은 호스트 윈도우 파일을 수정하는 것이었지만, 대신 "minikubeip"을 사용하여 127.0.0.1을 사용하고, 핫너 터미널 실행에서 이것으로 브라우저에서 hello-world.info 을 열 수 있다




  1. 미니 큐브 클러스터에서 포드 간 통신이 열려 있는지 확인하십시오. 아래 명령을 실행하여 활성화할 수 있습니다
  2. 미니큐브 입력, 입력 DNS를 설치해야 합니다.



Linux 이외의 OS에서 입력 컨트롤러를 실행하는 경우 입력 추가 기능을 사용할 때 표시되는 메시지에 주의해야 합니다. 위트...

PS C:\Development\kubernetes\service\ingress> minikube addons enable ingress
    �  ingress is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
    You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
    �  After the addon is enabled, please run "minikube tunnel" and your ingress resources would be available at "
    127.0.0.1"
        ▪ Using image k8s.gcr.io/ingress-nginx/controller:v1.2.1
        ▪ Using image k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1
        ▪ Using image k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1
    �  Verifying ingress addon...
    �  The 'ingress' addon is enabled
    PS C:\Development\kubernetes\service\ingress>

Linux 이외의 OS에서 IP 주소는 127.0.0.1이며 > kubectl을 실행할 때 나타나는 어떤 IP도 입력하지 않습니다. Linux가 아닌 OS에서는 127.0.0.1과 Ingress 컨트롤러가 사용하는 IP 간에 미니큐브 터널을 '브릿지'로 실행해야 하기 때문입니다. > kubectl get ingress에 표시된 IP가 아니라 호스트 파일에서 참조해야 하는 127.0.0.1입니다. 복.




이것은 Linux에서만 즉시 사용할 수 있는 입력 기능입니다.

좋은 해결책이야, 봐.


반응형