2016-09-19 23 views
1

ゲストブックのサンプルがMinikubeで動作しているかどうかを調べるのに少し苦労しています。私の主な問題は、例の説明hereがすべてのステップを詳しく説明しているにもかかわらず、は、デフォルトのYAMLファイルから実行しているWebアプリケーションに接続する方法については示していません。ミニブック内のゲストブックの例

私は、Mac OS X 10.9.5(マーベリックス)で0.10.0をMinikube vを使用していますし、これは(私は例の原稿から読み取った内容に応じてかなり良い思われる)私は最終的になってしまったものです:。

PolePro:all-in-one poletti$ kubectl get svc 
NAME   CLUSTER-IP EXTERNAL-IP PORT(S) AGE 
frontend  10.0.0.140 <none>  80/TCP  8s 
kubernetes  10.0.0.1  <none>  443/TCP 2h 
redis-master 10.0.0.165 <none>  6379/TCP 53m 
redis-slave 10.0.0.220 <none>  6379/TCP 37m 

PolePro:all-in-one poletti$ kubectl get deployments 
NAME   DESIRED CURRENT UP-TO-DATE AVAILABLE AGE 
frontend  3   3   3   3   20s 
redis-master 1   1   1   1   42m 
redis-slave 2   2   2   2   37m 

PolePro:all-in-one poletti$ kubectl get pods 
NAME       READY  STATUS RESTARTS AGE 
frontend-708336848-0h2zj  1/1  Running 0   29s 
frontend-708336848-ds8pn  1/1  Running 0   29s 
frontend-708336848-v8wp9  1/1  Running 0   29s 
redis-master-2093957696-or5iu 1/1  Running 0   43m 
redis-slave-109403812-12k68  1/1  Running 0   37m 
redis-slave-109403812-c7zmo  1/1  Running 0   37m 

私はhttp://10.0.0.140:80/(すなわちfrontendアドレスとポート上記kubectl get svcによって返される)に接続し、アプリケーションの実行を参照してくださいかもしれないと思ったが、私はConnection refusedを取得しています:

PolePro:all-in-one poletti$ curl -v http://10.0.0.140:80 
* About to connect() to 10.0.0.140 port 80 (#0) 
* Trying 10.0.0.140... 
* Adding handle: conn: 0x7fb0f9803a00 
* Adding handle: send: 0 
* Adding handle: recv: 0 
* Curl_addHandleToPipeline: length: 1 
* - Conn 0 (0x7fb0f9803a00) send_pipe: 1, recv_pipe: 0 
* Failed connect to 10.0.0.140:80; Connection refused 
* Closing connection 0 
curl: (7) Failed connect to 10.0.0.140:80; Connection refused 

例の記述がこのような重要なステップを逃しているとは、どういうわけか疑問です。私は何が欠けていますか?

答えて

1

まあ、私が自分自身をそれを考え出したようです(私はおそらくあまりにもPRをお送りします)

主なものは、少なくともMinikubeの設定で、kubectlコマンドはMac OS Xで実行される、ということですが、すべてのクールなものは仮想マシン内で発生します。私の場合、VirtualBox VM(私はまだMavericksにいる)です。

kubectl、この場合のように、サービスのアドレスを示しています

PolePro:all-in-one poletti$ kubectl get svc 
NAME   CLUSTER-IP EXTERNAL-IP PORT(S) AGE 
frontend  10.0.0.140 <none>  80/TCP  8s 
kubernetes  10.0.0.1  <none>  443/TCP 2h 
redis-master 10.0.0.165 <none>  6379/TCP 53m 
redis-slave 10.0.0.220 <none>  6379/TCP 37m 

これらのアドレスは必ずしも外部から、ノード内からアクセス可能です。私の場合は、ではなく、外部からアクセスできるでした。

あなたはそれについて何ができますか?

まず第一に、ちょうどそれが実際に実行している、あなたがノードにログインし、そこからカール実行できることを確認する:

# get the list of nodes, to get the name of the node we're interested into 
PolePro:all-in-one poletti$ kubectl get nodes 
NAME  STATUS AGE 
minikube Ready  3h 

# that was easy. Now we can get the address of the node 
PolePro:all-in-one poletti$ kubectl describe node/minikube | grep '^Address' 
Addresses:  192.168.99.100,192.168.99.100 

# now we can log into the node. The username is "docker", the password is "tcuser" 
# by default (without quotes): 
PolePro:all-in-one poletti$ ssh [email protected] 
[email protected]'s password: 
         ##   . 
        ## ## ##  == 
       ## ## ## ## ## === 
      /"""""""""""""""""\___/ === 
     ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~/===- ~~~ 
      \______ o   __/ 
      \ \   __/ 
       \____\_______/ 
_     _ ____  _   _ 
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __ 
| '_ \/_ \/_ \| __| __)/_` |/ _ \/__| |//_ \ '__| 
| |_) | (_) | (_) | |_/__/ (_| | (_) | (__| < __/ | 
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_| 
Boot2Docker version 1.11.1, build master : 901340f - Fri Jul 1 22:52:19 UTC 2016 
Docker version 1.11.1, build 5604cbe 
[email protected]:~$ curl -v http://10.0.0.140/ 
* Trying 10.0.0.140... 
* Connected to 10.0.0.140 (10.0.0.140) port 80 (#0) 
> GET/HTTP/1.1 
> Host: 10.0.0.140 
> User-Agent: curl/7.49.1 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< Date: Mon, 19 Sep 2016 13:37:56 GMT 
< Server: Apache/2.4.10 (Debian) PHP/5.6.20 
< Last-Modified: Wed, 09 Sep 2015 18:35:04 GMT 
< ETag: "399-51f54bdb4a600" 
< Accept-Ranges: bytes 
< Content-Length: 921 
< Vary: Accept-Encoding 
< Content-Type: text/html 
< 
<html ng-app="redis"> 
    <head> 
    <title>Guestbook</title> 
    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css"> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.12/angular.min.js"></script> 
    <script src="controllers.js"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.13.0/ui-bootstrap-tpls.js"></script> 
    </head> 
    <body ng-controller="RedisCtrl"> 
    <div style="width: 50%; margin-left: 20px"> 
     <h2>Guestbook</h2> 
    <form> 
    <fieldset> 
    <input ng-model="msg" placeholder="Messages" class="form-control" type="text" name="input"><br> 
    <button type="button" class="btn btn-primary" ng-click="controller.onRedis()">Submit</button> 
    </fieldset> 
    </form> 
    <div> 
     <div ng-repeat="msg in messages track by $index"> 
     {{msg}} 
     </div> 
    </div> 
    </div> 
    </body> 
</html> 
* Connection #0 to host 10.0.0.140 left intact 

イェーイ!実際にはポート80で動作するものがあります。

とにかくこれはやや厄介です。これをMac OS Xのブラウザで確認したいと思います。これを行う方法の1つは、NodePortを使用してノードマップをaノードのポートへのサービスのポート。

apiVersion: v1 
kind: Service 
metadata: 
    name: frontend 
    labels: 
    app: guestbook 
    tier: frontend 
spec: 
    # if your cluster supports it, uncomment the following to automatically create 
    # an external load-balanced IP for the frontend service. 
    # type: LoadBalancer 
    type: NodePort 
    ports: 
    # the port that this service should serve on 
    - port: 80 
    selector: 
    app: guestbook 
    tier: frontend 

この変更は、使用しているファイルかに応じfrontend-service.yamlall-in-one/frontend.yamlまたはall-in-one/guestbook-all-in-one.yamlのいずれかで要求される可能性があります。これは、なりfrontendサービス定義に次の行を追加し、達成されます。

あなたは、このような全体のゲストブック(それが必要だ場合、私は知らないが、私は安全側に残ります)あなたは、ポートおよびファイアウォールについてのメッセージが表示されます、再作成する場合:

# delete previous instance to start from "scratch" 
PolePro:all-in-one poletti$ kubectl delete deployments,svc -l 'app in (redis, guestbook)' 
deployment "frontend" deleted 
deployment "redis-master" deleted 
deployment "redis-slave" deleted 
service "frontend" deleted 
service "redis-master" deleted 
service "redis-slave" deleted 

# we'll use the all-in-one here to get quickly to the point 
PolePro:all-in-one poletti$ vi guestbook-all-in-one.yaml 

# with the new NodePort change in place, we're ready to start again 
PolePro:all-in-one poletti$ kubectl create -f guestbook-all-in-one.yaml 
service "redis-master" created 
deployment "redis-master" created 
service "redis-slave" created 
deployment "redis-slave" created 
You have exposed your service on an external port on all nodes in your 
cluster. If you want to expose this service to the external internet, you may 
need to set up firewall rules for the service port(s) (tcp:30559) to serve traffic. 

See http://releases.k8s.io/release-1.3/docs/user-guide/services-firewalls.md for more  details. 
service "frontend" created 
deployment "frontend" created 

ノード上の30559ポートがフロントエンドポート80にマップされるため、アドレスhttp://192.168.99.100:30559/でブラウザを開くことができます。http://<NODE-IP>:<EXTERNAL-PORT>/)、ゲストブックを使用できます!

+0

1つはまた、サービスYAML設定を変更することなくポートを公開するために、 'kubectl expose'コマンドを使用することができます。通常、クラスタ内のものをチェックする方法は、ここに示すようにビジーボックスコンテナを使用することです(http://blog.kubernetes.io/2015/10/some-things-you-didnt-know-about -kubectl_28.html)。この例では、サービスの種類と各種類の使用の効果の違いを十分に文書化していない場合は、PRをお送りください。ありがとう! –

1

クイックや汚れ: kubectl port-forward frontend-708336848-0h2zj 80:80

関連する問題