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