2017-07-15 1 views
1

デフォルトではKubernetesは、デフォルトのnamesapceにkubernetesサービスを追加します。これにより、その名前空間内の任意のポッドからkubernetes APIにアクセスできます。Kubernetes APIを新しい名前空間に内部的に公開するにはどうすればよいですか?

たとえば、私がすることができます

TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) 
kubectl exec -it $SOME_POD -- bash 
curl -v https://kubernetes/api/v1/ \ 
    -H "Authorization: Bearer $TOKEN" \ 
    -k -v 

など何かを取得:私は新しい名前空間を作成する場合、デフォルトでは何もkubernetesサービスはありません

< HTTP/1.1 200 OK 
< Content-Type: application/json 
< Date: Sat, 15 Jul 2017 22:16:09 GMT 
< Transfer-Encoding: chunked 
< 
{ 
    "kind": "APIResourceList", 
    "groupVersion": "v1", 
    "resources": [ 
    { 
     "name": "bindings", 
     "namespaced": true, 
    ... 

を。

apiVersion: v1 
kind: Service 
metadata: 
    labels: 
    component: apiserver 
    provider: kubernetes 
    name: kubernetes 
    resourceVersion: "12" 
spec: 
    ports: 
    - name: https 
    port: 443 
    protocol: TCP 
    targetPort: 443 
    sessionAffinity: ClientIP 
    type: ClusterIP 

をしかし、任意のポッドに接続することがあるようですので、これは動作するようには思えません。私は(基本的にはデフォルトの名前空間からコピーされた)次のリソースサービス定義を使用して作成しようとしています。

基本的には、新しく作成された名前空間のdefault名前空間と同じ動作が必要です。

現在のバージョン:

{ 
    "major": "1", 
    "minor": "5", 
    "gitVersion": "v1.5.7", 
    "gitCommit": "8eb75a5810cba92ccad845ca360cf924f2385881", 
    "gitTreeState": "clean", 
    "buildDate": "2017-04-27T09:42:05Z", 
    "goVersion": "go1.7.5", 
    "compiler": "gc", 
    "platform": "linux/amd64" 
} 

答えて

2

あなたは、ホスト名を修飾することにより、他の名前空間からkubernetesサービスにアクセスすることができます

ホスト名kubernetes.default.svckubernetes.default.svc.cluster.local、および$KUBERNETES_SERVICE_HOSTに含まれるIPは、すべてからkubernetes APIサービスに解決されます任意の名前空間。あなたの例に続いて、あなたは任意の名前空間からこれを行うことができます

TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) 
kubectl exec -it $SOME_POD -- bash 
curl -v https://kubernetes.default.svc/api/v1/ \ 
    -H "Authorization: Bearer $TOKEN" 
    -k -v 
+0

小さな問題かかわら: '/アプリ#ピングkubernetes.default.svc PING kubernetes.default:これらの2つのアドレスが二つの異なるIPアドレスに解決.SVC(10.3.240.1):56データバイト ^ C --- kubernetes.default.svcのping統計---送信 2つのパケット、0のパケットが受信さ、100%のパケット損失 /アプリ#が$ KUBERNETES_SERVICE_HOST 10.3エコー.248.39 '彼らは同じでなければならないようだ。 –

1

私は、サービスIPは、すべてのネームスペースで同じだと思います。新しいネームスペースのkubernetesサービスIPは、環境変数KUBERNETES_SERVICE_HOSTとしてPODに送られます。

このようにAPIにアクセスできます。

TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) 
curl -k -v https://$KUBERNETES_SERVICE_HOST/api/v1/ -H "Authorization: Bearer $TOKEN 

私はこのバージョン1.7.1をテストしました。私はクラスターの古いバージョンを持っていませんでした。これをテストして状態を更新することができます。

おかげ SR

関連する問題