[nginx] kubernetes 서비스 외부 IP 보류

kubernetes에 nginx를 배포하려고하는데 kubernetes 버전은 v1.5.2이며 3 복제본으로 nginx를 배포했으며 YAML 파일은 다음과 같습니다.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: deployment-example
spec:
  replicas: 3
  revisionHistoryLimit: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.10
        ports:
        - containerPort: 80

이제 노드의 포트 30062에서 포트 80을 노출하려고합니다. 아래에서 서비스를 생성했기 때문입니다.

kind: Service
apiVersion: v1
metadata:
  name: nginx-ils-service
spec:
  ports:
    - name: http
      port: 80
      nodePort: 30062
  selector:
    app: nginx
  type: LoadBalancer

이 서비스는 정상적으로 작동하지만 터미널의 kubernetes 대시 보드뿐만 아니라 보류 중으로 표시됩니다.
터미널 출력대시 보드 상태

이 문제를 해결하도록 도와주세요. 감사 …



답변

당신이 (사용하여 사용자는 Kubernetes 클러스터를 사용하는 것 같습니다 minikube, kubeadm등). 이 경우 AWS 또는 Google Cloud와 달리 LoadBalancer가 통합되어 있지 않습니다. 이 기본 설정에서는 NodePortIngress Controller 또는 Ingress Controller 만 사용할 수 있습니다 .

Ingress Controller 를 사용하면 포드에 매핑되는 도메인 이름을 설정할 수 있습니다. LoadBalancer수신 컨트롤러를 사용하는 경우 서비스에 유형 을 제공 할 필요가 없습니다 .


답변

Minikube를 사용하는 경우 마술 명령이 있습니다!

$ minikube tunnel

누군가가 이것으로 몇 분을 절약 할 수 있기를 바랍니다.

참조 링크
https://minikube.sigs.k8s.io/docs/handbook/accessing/#using-minikube-tunnel


답변

GCE 또는 EKS (사용하지 않은)를 사용하지 않는 경우 서비스 YAML에 사양을 kubeadm추가 할 수 있습니다 externalIPs. 와 같은 노드의 기본 인터페이스와 관련된 IP를 사용할 수 있습니다 eth0. 그런 다음 노드의 외부 IP를 사용하여 외부에서 서비스에 액세스 할 수 있습니다.

...
spec:
  type: LoadBalancer
  externalIPs:
  - 192.168.0.10


답변

의 서비스에 액세스하려면 minikube다음 명령을 실행해야합니다.

minikube service [-n NAMESPACE] [--url] NAME

자세한 정보는 여기 : Minikube GitHub


답변

kubeadm을 사용하여 단일 노드 k8s 클러스터를 만들었습니다. PortForwardkubectl proxy를 시도했을 때 외부 IP가 보류중인 것으로 나타났습니다.

$ kubectl get svc -n argocd argocd-server
NAME            TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
argocd-server   LoadBalancer   10.107.37.153   <pending>     80:30047/TCP,443:31307/TCP   110s

제 경우에는 다음과 같이 서비스를 패치했습니다.

kubectl patch svc <svc-name> -n <namespace> -p '{"spec": {"type": "LoadBalancer", "externalIPs":["172.31.71.218"]}}'

그 후 공개 IP를 통해 서비스를 시작했습니다.

$ kubectl get svc argo-ui -n argo
NAME      TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
argo-ui   LoadBalancer   10.103.219.8   172.31.71.218   80:30981/TCP   7m50s


답변

minikube 에서 실행중인 경우 default 를 사용하지 않는 경우 네임 스페이스를 언급하는 것을 잊지 마십시오.

minikube 서비스 << service_name >> –url –namespace = << namespace_name >>


답변

minikube를 사용하는 경우 터미널에서 아래 명령을 실행하십시오.

$ minikube ip
$ 172.17.0.2 // then
$ curl http://172.17.0.2:31245
or simply
$ curl http://$(minikube ip):31245