web-dev-qa-db-ja.com

Kubernetes Ingressエンドポイント/ IPアドレスの取得

Base OS : CentOS (1 master 2 minions)
K8S version : 1.9.5 (deployed using KubeSpray)

私はKubernetes Ingressを初めて使用し、それぞれ独自のパスで到達可能な2つの異なるサービスをセットアップしています。

私は2つの展開を作成しました:

kubectl run nginx --image=nginx --port=80
kubectl run echoserver --image=gcr.io/google_containers/echoserver:1.4 --port=8080

対応するサービスも作成しました:

kubectl expose deployment nginx --target-port=80 --type=NodePort
kubectl expose deployment echoserver --target-port=8080 --type=NodePort

私のsvcは:

[root@node1 kubernetes]# kubectl get svc
NAME         TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
echoserver   NodePort   10.233.48.121   <none>        8080:31250/TCP   47m
nginx        NodePort   10.233.44.54    <none>        80:32018/TCP     1h

NodeIPアドレスは172.16.16.2と私は両方のポッドにアクセスできます

http://172.16.16.2:31250 &
http://172.16.16.2:32018

これに加えて、イングレスを展開して、2つのIPと2つの異なるポートを使用しない両方のポッドに到達できるようにしますが、1つのIPアドレスは異なるパスになります。

だから私のイングレスファイルは:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fanout-nginx-ingress
spec:
  rules:
  - http:
      paths:
      - path: /nginx
        backend:
          serviceName: nginx
          servicePort: 80
      - path: /echo
        backend:
          serviceName: echoserver
          servicePort: 8080

これにより以下が得られます。

[root@node1 kubernetes]# kubectl describe  ing fanout-nginx-ingress
Name:             fanout-nginx-ingress
Namespace:        development
Address:          
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host  Path  Backends
  ----  ----  --------
  *     
        /nginx   nginx:80 (<none>)
        /echo    echoserver:8080 (<none>)
Annotations:
Events:  <none>

NodeIPアドレス(172.16.16.2)を使用してポッドにアクセスしようとすると、何も得られません。

http://172.16.16.2/echo
http://172.16.16.2/nginx

私の設定で見逃しているものはありますか?

7
user4889345

ベアメタルのインストールでも同じ問題が発生しました-または、それに近いもの(kubernetes仮想クラスター-Host-Only-Adapterを介して接続された仮想マシンのセット)。ここに私の kubernetes vlab へのリンクがあります。

まず、入力コントローラーがインストールされていることを確認してください。現在、試してみる価値のある2つのイングレスコントローラがあります kubernetes nginxイングレスコントローラ および nginx kubernetesイングレスコントローラ -最初にインストールしました。

Installation

インストール手順 に移動し、最初のステップを実行します

# prerequisite-generic-deployment-command
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml

次に、クラスターノードのIPアドレスを取得します。

$ kubectl get nodes -o wide
NAME     STATUS   ROLES    ...   INTERNAL-IP    
master   Ready    master   ...   192.168.121.110
node01   Ready    <none>   ...   192.168.121.111
node02   Ready    <none>   ...   192.168.121.112

さらに、クレートingress-nginxタイプLoadBalancerのサービス。インストールチュートリアルからNodePortテンプレートサービスをダウンロードし、svc-ingress-nginx-lb.yamlファイル。

$ curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml > svc-ingress-nginx-lb.yaml

# my changes svc-ingress-nginx-lb.yaml
type: LoadBalancer
externalIPs:
  - 192.168.121.110
  - 192.168.121.111
  - 192.168.121.112
externalTrafficPolicy: Local

# create ingress- service
$ kubectl apply -f svc-ingress-nginx-lb.yaml

検証

それを確認します ingress-nginxサービスが作成されました。

$ kubectl get svc -n ingress-nginx
NAME            TYPE           CLUSTER-IP     EXTERNAL-IP                                                       PORT(S)                      AGE
ingress-nginx   LoadBalancer   10.110.127.9   192.168.121.110,192.168.121.111,192.168.121.112   80:30284/TCP,443:31684/TCP   70m

それを確認します nginx-ingress-controllerデプロイメントが作成されました。

$ kubectl get deploy -n ingress-nginx
NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-ingress-controller   1         1         1            1           73m

それを確認します nginx-ingressポッドが実行中です。

$ kubectl get pods --all-namespaces -l 

app.kubernetes.io/name=ingress-nginx
NAMESPACE       NAME                                        READY   STATUS    RESTARTS   AGE
ingress-nginx   nginx-ingress-controller-5cd796c58c-lg6d4   1/1     Running   0          75m

最後に、入力コントローラーのバージョンを確認します。 ポッド名を変更することを忘れないでください!

$ kubectl exec -it nginx-ingress-controller-5cd796c58c-lg6d4 -n ingress-nginx -- /nginx-ingress-controller --version
-------------------------------------------------------------------------------
NGINX Ingress controller
  Release:    0.21.0
  Build:      git-b65b85cd9
  Repository: https://github.com/aledbf/ingress-nginx
-------------------------------------------------------------------------------

テスト中

この tutorial のステップを実行して、イングレスコントローラーが動作していることをテストします。もちろん、minikubeの部分は省略します。

成功すると、すべてのステップを実行すると、次のような入力制御リソースが作成されます。

$ kubectl get ing
NAME               HOSTS                                ADDRESS                                          PORTS    AGE
ingress-tutorial   myminikube.info,cheeses.all          192.168.121.110,192.168.121.111,192.168.121.112   80      91m

そして、このように見えるポッド。

$ kubectl get pods 
NAME                              READY   STATUS             RESTARTS   AGE
cheddar-cheese-6f94c9dbfd-cll4z   1/1     Running            0          110m
echoserver-55dcfbf8c6-dwl6s       1/1     Running            0          104m
stilton-cheese-5f6bbdd7dd-8s8bf   1/1     Running            0          110m

最後に、myminikube.infoは、入力ロードバランサー経由で伝播します。

$ curl myminikube.info
CLIENT VALUES:
client_address=10.44.0.7
command=GET
real path=/
query=nil
request_version=1.1
request_uri=http://myminikube.info:8080/

SERVER VALUES:
server_version=nginx: 1.10.0 - lua: 10001

HEADERS RECEIVED:
accept=*/*
Host=myminikube.info
user-agent=curl/7.29.0
x-forwarded-for=10.32.0.1
x-forwarded-Host=myminikube.info
x-forwarded-port=80
x-forwarded-proto=http
x-original-uri=/
x-real-ip=10.32.0.1
x-request-id=b2fb3ee219507bfa12472c7d481d4b72
x-scheme=http
BODY:

ベアメタルのような環境でイングレスを制作するのは長い旅でした。したがって、私が助けてくれた関連リンクを含めます。

8
Lukasz Dynowski

クラスターに入力コントローラーがあるかどうかを確認します。

$ kubectl get po --all-namespaces

次のように表示されるはずです。

kube-system nginx-ingress-controller-gwts0   1/1  Running   0    18d

Ingressを作成して、Ingressが存在するネームスペース内のサービスに対応することのみが可能です。セキュリティ上の理由から、名前空間を越えた進入は実装されていません。

1
Nicola Ben

クラスターにIngressコントローラーがないようです。

一般に、イングレスコントローラーは次のように機能します。1.クラスター内の特定のタイプのオブジェクト(イングレス、「nginx」)を検索します2.そのオブジェクトを解析し、特定のイングレスポッドの構成セクションを作成します。 3.そのポッドオブジェクトを更新します(更新された構成で再起動します)。

その特定のポッドは、着信ポート(通常はノード上の2、3の専用ポート)からクラスター内の構成済みトラフィック宛先へのトラフィックを処理します。

サポートおよび保守されている2つのコントローラーから選択できます- Nginx および [〜#〜] gce [〜#〜]

入力コントローラーは、インストール中に作成するいくつかのコンポーネントで構成されます。 Nginx Ingress ドキュメンテーションのインストール部分は次のとおりです。

curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/namespace.yaml              | kubectl apply -f -
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/default-backend.yaml        | kubectl apply -f -
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/configmap.yaml              | kubectl apply -f -
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/tcp-services-configmap.yaml | kubectl apply -f -
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/udp-services-configmap.yaml | kubectl apply -f -

[〜#〜] rbac [〜#〜] クラスターで許可が設定されている場合:

curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/rbac.yaml      | kubectl apply -f -
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/with-rbac.yaml | kubectl apply -f -

RBACが構成されていない場合:

curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/without-rbac.yaml | kubectl apply -f -

ゼロからクラスターを作成する場合:

curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml | kubectl apply -f -

インストールを確認します。

kubectl get pods --all-namespaces -l app=ingress-nginx --watch

次のように表示されるはずです。

NAMESPACE       NAME                                       READY     STATUS    RESTARTS   AGE
ingress-nginx   nginx-ingress-controller-699cdf846-nj2rw   1/1       Running   0          1h

利用可能なサービスとそのパラメーターを確認します。

kubectl get services --all-namespaces

カスタムサービスプロバイダーの展開(minikube、AWS、Azure、GKE)を使用している場合は、インストールの詳細について Nginx Ingress documentation に従ってください。

Ingressの詳細については、公式の Kubernetes Ingress documentation を参照してください。

1
VAS