2017-09-30 33 views
1

我已經在可以從Internet訪問的服務器上安裝了minikube。Kubernetes Ingress在nginx反向代理後面運行

我創建了一個kubernetes服務,這是可供選擇:

>kubectl get service myservice 
NAME  CLUSTER-IP EXTERNAL-IP PORT(S)  AGE 
myservice 10.0.0.246 <nodes>  80:31988/TCP 14h 

minikube的IP地址爲:

>minikube ip 
192.168.42.135 

我想URL http://myservice.myhost.com(即端口80)映射到在minikube服務。

我有nginx在主機上運行(完全與kubernetes無關)。我可以設置一個虛擬主機,將URL映射到192.168.42.135:31988(節點端口),它工作正常。

我想用一個入口。我已經添加並啓用了入口。但我不確定:

一)什麼YAML文件應包含

二)如何傳入流量的80端口,從瀏覽器被重定向到入口和minikube。

c)我還需要使用nginx作爲反向代理嗎? d)如果是這樣,運行ingress-nginx的地址是什麼(這樣我可以將流量映射到它)?

回答

0

正如@silverfox所述,您需要一個入口控制器。您可以啓用minikube入口控制器是這樣的:

minikube addons enable ingress 

Minikube運行在IP 192.168.42.135,根據minikube ip。在啓用入口插件後,它也會監聽端口80。但是這意味着在主機上需要一個像nginx這樣的反向代理來代理調用端口80到minikube。

在minikube上啓用入口後,我創建了一個入口文件(myservice-ingress。YAML):

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: myservice-ingress 
    annotations: 
    ingress.kubernetes.io/rewrite-target:/
spec: 
    rules: 
    - host: myservice.myhost.com 
     http: 
     paths: 
     - path:/
      backend: 
      serviceName: myservice 
      servicePort: 80 

注意,這是由@silverfox給出的,因爲它必須包含「主機」,這應與答案不同。

使用這個文件,我創建了入口:

kubectl create -f myservice-ingress.yaml 

最後,我添加了一個虛擬主機的nginx(運行minikube以外),以代理業務從外面走進minikube:

server { 
    listen 80; 
    server_name myservice.myhost.com; 
    location/{ 
    proxy_set_header Host   $host; 
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_pass http://192.168.42.135; 
    } 
} 

Host標頭必須通過,因爲入口使用它來匹配服務。如果未通過,minikube無法將請求與服務匹配。

記得在添加上面的虛擬主機後重新啓動nginx。

2

設置

首先,你需要一個nginx ingress controller

nginx實例將偵聽主機80和443端口,並將每個HTTP請求重定向到入口配置定義的服務,如下所示。

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: my-service-ingress 
annotations: 
    # by default the controller redirects (301) HTTP to HTTPS, 
    # the following would make it disabled. 
    # ingress.kubernetes.io/ssl-redirect: "false" 
spec: 
    rules: 
    - http: 
     paths: 
     - path:/
     backend: 
      serviceName: myservice 
      servicePort: 80 

使用https://{host-ip}/訪問的MyService,主機應該在哪裏nginx的控制器在運行一個。

通常你不需要另一個nginx的外kubernetes集羣。

雖然Minikube有點不同,但它在虛擬機中運行kubernetes而不是主機。

我們需要做一些像host一樣的端口轉發:80 => minikube:80,在主機上運行一個反向代理(如nginx)是一種很好的方式。

它也可以通過setting virtual networking port forward in Virtualbox完成。

+0

我猜minikube與「普通」kubernetes不同,因爲它有自己的IP地址,所以需要nginx代理請求到minikube。感謝您的提示。 –