NGINX-INGRESSを作成しようとしています(最初はローカルで、次にロードバランサーの背後でAWSにデプロイされます)。ただし、私はKubernetesを初めて使用し、NGINXのIngressモデルを理解しています。NGINX-INGRESSService、IngressまたはBoth
パスでルーティングしたい複数のFlask-Appsを使用しています(/users
、/content
など)。サービスの名前はuser-service
のport: 8000
(それらのコンテナー)です。ポートも8000です)
this の例では、Ingressが定義されています。ただし、(Flaskと同じ名前空間に)入力を適用すると、http://localhost
からの応答がありません。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-name
namespace: my-namespace
spec:
rules:
- http:
paths:
- path: /users
backend:
serviceName: users-service
servicePort: 8000
- path: /content
backend:
serviceName: content-service
servicePort: 8000
さらに、Docker for Macの下で nginx-ingress "Deployment"のドキュメントを確認します(これは、DockerをMacOS)それら サービスを定義 のように:
kind: Service
apiVersion: v1
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
externalTrafficPolicy: Local
type: LoadBalancer
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
- name: https
port: 443
protocol: TCP
targetPort: https
---
これは私には機能しているようです(「localhost」を開くと、NGINXが「見つかりません」と表示されますが、これは私の名前空間とは異なる名前空間のサービスであり、ポート80/443とサービスポートの間に関連付けはありません。 。
参考までに、ここに私の展開/サービス定義の1つを示します。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: users-service
labels:
app: users-service
namespace: example
spec:
replicas: 1
selector:
matchLabels:
app: users-service
template:
metadata:
labels:
app: users-service
spec:
containers:
- name: users-service
image: users-service:latest
imagePullPolicy: Never
ports:
- containerPort: 8000
---
kind: Service
apiVersion: v1
metadata:
name: users-service
spec:
selector:
app: users-service
ports:
- protocol: TCP
port: 8000
更新
NGINX-Controller + Ingressを設定するためのビデオをたどりましたが、ここでは「localhost/users」と入力しても機能しません。
describe-ingress:
(base) MacBook-Pro-2018-i9:microservices jordanbaucke$ kubectl describe ingress users-ingress
Name: users-ingress
Namespace: default
Address:
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
Host Path Backends
---- ---- --------
*
/users users-service:8000 (10.1.0.75:8000)
Annotations: Events: <none>
ユーザーサービス:
(base) MacBook-Pro-2018-i9:microservices jordanbaucke$ kubectl describe svc users-service
Name: users-service
Namespace: default
Labels: <none>
Annotations: Selector: app=users-service
Type: ClusterIP
IP: 10.100.213.229
Port: <unset> 8000/TCP
TargetPort: 8000/TCP
Endpoints: 10.1.0.75:8000
Session Affinity: None
Events: <none>
nginx-ingress
(base) MacBook-Pro-2018-i9:microservices jordanbaucke$ kubectl describe svc nginx-ingress
Name: nginx-ingress
Namespace: default
Labels: <none>
Annotations: Selector: name=nginx-ingress
Type: NodePort
IP: 10.106.167.181
LoadBalancer Ingress: localhost
Port: http 80/TCP
TargetPort: 80/TCP
NodePort: http 32710/TCP
Endpoints: 10.1.0.74:80
Port: https 443/TCP
TargetPort: 443/TCP
NodePort: https 32240/TCP
Endpoints: 10.1.0.74:443
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
NodeIP:NodePort/users
の組み合わせを入力しようとすると、接続しませんか?
nginx-ingress
ポッド内から、次のように呼び出します。
curl 10.1.0.75:8000
またはcurl 10.100.213.229:8000
は結果を返します。
Nginxまたはその他のイングレスが正しく動作するようにするには:
したがって、この場合、Dockerデスクトップがロードバランサータイプのサービス(ingress-nginx)を使用してnginxイングレスコントローラーを公開しているため、機能しません。これはNodePortタイプである必要があります。完了すると、ワークロードポッドにNodeIP:NodePort/users
およびNodeIP:NodePort/content
を介してアクセスできます。 NodeIP:NodePort
もnginxホームページを提供する必要があります。