先說環境:
| IP | 系統 | 備注 | 其它 | |
| Server | 192.168.1.99 | centos 7.6 | 淘汰的破本子 | |
| Client | 192.168.1.11 | Win 10 | 當前用的本子 |
啟動minikube
$ minikube start * Centos 7.6.1810 上的 minikube v1.13.0 * 根據現有的配置文件使用 docker 驅動程序 * Starting control plane node minikube in cluster minikube * Restarting existing docker container for "minikube" ... * 正在 Docker 19.03.8 中准備 Kubernetes v1.19.0… * Verifying Kubernetes components... * Enabled addons: dashboard, default-storageclass, metrics-server, storage-provisioner * Done! kubectl is now configured to use "minikube" by default
運行dashboard
$ minikube dashboard * 正在驗證 dashboard 運行情況 ... * Launching proxy ... * 正在驗證 proxy 運行狀況 ... * Opening http://127.0.0.1:35967/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser... - http://127.0.0.1:35967/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
由於每於運行dashboard,端口都會變,不方便nginx做轉發, 所以我直接指定了一個固定的端口8080
並指定address與accept-hosts,這樣的話,在局域網內的其它電腦也可以訪問了
$ kubectl proxy --port=8080 --address=0.0.0.0 --accept-hosts='^*$' Starting to serve on [::]:8080
接着在Client電腦上修改hosts文件,添加以下這條
192.168.1.99 k8s.peter.com
在Server中配置好nginx轉發
$ cat k8s.conf server { listen 80; server_name k8s.peter.com; index index.html; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8080/; } }
最后就可以在Client通過瀏覽器打開以下URL訪問Dashboard了
http://k8s.peter.com/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
在minikube集群中運行一個nginx服務
1.創建發布文件nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: default
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
2.執行發布命令
kubectl apply -f nginx-deploy.yaml
3.查看結果
$ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-585449566-tlznq 1/1 Running 0 8m56s 172.18.0.3 minikube <none> <none>
4.創建service發布文件nginx-svc.yaml
type用的是NodePort,端口是31000
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
selector:
app: nginx
type: NodePort
ports:
- port: 8001
targetPort: 80
protocol: TCP
nodePort: 31000
5.創建Service
kubectl apply -f nginx-svc.yaml
6.查看結果
$ kubectl get svc nginx -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR nginx NodePort 10.106.146.47 <none> 8001:31000/TCP 12m app=nginx
7.在Server中通過curl測試nginx是否可以訪問,其中的$(minikube service nginx --url)用來獲取上面創建的service的訪問地址
很明顯,我們已經可以在訪問nginx服務了
$ curl $(minikube service nginx --url) <!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> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
如果只是在Server機器上訪問nginx是不夠的,如果希望在Client機器上訪問nginx服務那應該怎么辦呢.
方法1:我們可以在Server這台機器中通過nginx轉發,來訪問minikube集群中的nginx服務
nginx配置文件如下
server
{
listen 80;
server_name k8s.peter.com;
index index.html;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/;
}
location /nginx/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://172.17.0.2:31000/;
}
}
然后就可以在瀏覽器中通過http://k8s.peter.com/nginx來訪問了
方法2:在Client這台機器中,通過ssh端口轉發,也是可以的,下面我們來試試:
首先,在Client這台機器中執行ssh執行端口轉發命令
ssh -N -L 31000:172.17.0.2:31000 root@192.168.1.99
這樣我們就可以在Client這台機器上通過http://127.0.0.1:31000來訪問minikube集群中的nginx服務了
