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가 통합되어 있지 않습니다. 이 기본 설정에서는 NodePort
Ingress 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 클러스터를 만들었습니다. PortForward 와 kubectl 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