2016-06-27 22 views
5

Tôi đã cài đặt minikube trên máy ubuntu 16.04 của tôi và đã bắt đầu một cụm, với một thông điệpminikube: không thể kết nối một dịch vụ nginx triển khai tại địa phương

"Kubernetes is available at https://192.168.99.100:443"

Tiếp theo, tôi đã triển khai dịch vụ nginx như sau lệnh

> kubectl.sh run my-nginx --image=nginx --replicas=2 --port=80 --expose

> kubectl.sh get pods -o wide 
NAME      READY  STATUS RESTARTS AGE  NODE 
my-nginx-2494149703-8jnh4 1/1  Running 0   13m  127.0.0.1 
my-nginx-2494149703-q09be 1/1  Running 0   13m  127.0.0.1 

> kubectl.sh get services -o wide 
NAME   CLUSTER-IP EXTERNAL-IP PORT(S) AGE  SELECTOR 
kubernetes 10.0.0.1  <none>  443/TCP 14m  <none> 
my-nginx  10.0.0.83 <none>  80/TCP 13m  run=my-nginx 

> kubectl.sh get nodes -o wide 
NAME  STATUS AGE 
127.0.0.1 Ready  16m 

Câu hỏi:

1) Nút 127.0.0.1 là máy phát triển cục bộ của tôi? Điều này khiến tôi làm tôi bối rối nhất.

2) Hiểu đúng sau đây của tôi: Cụm (nút, máy chủ API kubernetes) có địa chỉ IP nội bộ trong 10.0.0.x và địa chỉ IP bên ngoài tương ứng của chúng là 192.168.99.x. 2 pods sau đó sẽ có IP trong phạm vi như 10.0.1.x và 10.0.2.x?

3) Tại sao IP bên ngoài cho các dịch vụ không có? Không, ngay cả đối với dịch vụ kubernetes. Không phải là 192.168.99.43 một IP bên ngoài ở đây?

4) Quan trọng nhất, làm cách nào để kết nối với dịch vụ nginx từ máy tính xách tay của tôi?

Trả lời

9

1) Nút 127.0.0.1 là máy phát triển cục bộ của tôi? Điều này đã khiến tôi làm tôi bối rối nhất.

Khi nút đăng ký, bạn cung cấp IP hoặc tên để đăng ký. Theo mặc định, nút chỉ đăng ký 127.0.0.1. Đây là tham chiếu máy ảo của bạn chạy Linux, không phải máy chủ của bạn.

2) Có hiểu biết của tôi sau đây đúng: Cụm (nút, kubernetes máy chủ API) có địa chỉ IP nội bộ trong 10.0.0.x và tương ứng địa chỉ IP bên ngoài của họ là 192.168.99.x. 2 cụm sẽ sau đó có IP trong phạm vi như 10.0.1.x và 10.0.2.x?

Yup, mạng 10.0.0.x là mạng lớp phủ của bạn. 192.168.99.x là địa chỉ "công khai" của bạn hiển thị bên ngoài cụm.

3) Tại sao IP bên ngoài cho các dịch vụ không có? Thậm chí, đối với dịch vụ kubernetes. Không phải là 192.168.99.43 một IP bên ngoài ở đây?

IP bên ngoài thường được sử dụng để xâm nhập lưu lượng truy cập qua một IP cụ thể. Dịch vụ kubernetes đang sử dụng một loại dịch vụ clusterIP có nghĩa là nó chỉ hiển thị cho cụm nội bộ.

4) Quan trọng nhất, làm cách nào để kết nối với dịch vụ nginx từ máy tính xách tay của tôi?

Cách dễ nhất để xem dịch vụ nginx của bạn là nhập NodePort, sau đó triển khai dịch vụ. Sau đó, mô tả dịch vụ để có được cổng được gán (hoặc sau khi bạn tạo nó sẽ cho bạn biết).Sau đó nhấn ip của máy ảo của bạn và cung cấp NodePort được gán tự động.

e.g. http://192.168.99.100:30001

+4

Cảm ơn Steve! Một cách khác để truy cập dịch vụ (nếu bạn không muốn sử dụng một NodePort), là sử dụng cổng chuyển tiếp kubectl để truy cập vào vỏ bên dưới. Ví dụ, bạn có thể chạy: 'kubectl port-forward mypod 8080: 8080', để làm cho nhóm có sẵn trên http: // localhost: 8080 – dlorenc

+0

Cảm ơn Steve. Về câu trả lời đầu tiên của bạn, bạn có nghĩa là để nói rằng 127.0.0.1 là giao diện nw duy nhất của nút (VM trong trường hợp này) mà các pod bên trong nó có thể giao tiếp, phải không? Thứ hai, khi tôi chạy 'kubectl exec my-nginx-yczg9 - sh -c' ifconfig -a '', nó cho eth0 với một số IP như 172.17.0.4 Bây giờ, như tôi đã hiểu, my-nginx-yczg9 là một Vì vậy, nó là công bằng để nói rằng 172.17.0.4:80 là một IP Pod (ảo IP-endpoint?), mà sẽ được proxied vào container nginx thích hợp chạy bên trong vỏ và container sẽ có IP trong subnet docker bên trong? – soupybionics

+0

Cảm ơn diorec, lệnh port forward hoạt động như thế nào? Vui lòng sửa tôi nếu tôi sai: Theo sự hiểu biết của tôi, máy chủ lưu trữ cục bộ của tôi (tức là 127.0.0.1:8080) sẽ hoạt động như một proxy cho 192.168.99.100:30001, trong đó lệnh sẽ là myubod chuyển tiếp 8080: 30001 – soupybionics

Các vấn đề liên quan