在本地Kubernetes上配置Nginx-Ingress-Controller
这篇文章是关于“在本地和Kubernetes上部署微服务意识的Web应用程序的轨迹”的一部分。
首先
我们想要在Kubernetes上按照以下配置来构建Web应用程序。
app ---- /authentication : (1)認証用nodejsアプリ (ポート3000)
|-- /serviceA
| |-- / : (2)vuejsで作成したサービスAのフロントエンド (ポート8080)
| |-- /api : (3)expressで作成したサービスAのバックエンド (ポート3001)
|
|-- /serviceB
|-- / : (4)vuejsで作成したサービスBのフロントエンド (ポート8081)
|-- /api : (5)expressで作成したサービスBのバックエンド (ポート3101)
1到5个服务都在不同的端口上运行,并且每个服务都在独立的端口上等待连接。如果不做任何更改就部署这个配置,假设域名是www.services.com,
www.services.com:8080
www.services.com:8081
用中文进行逐句翻译,如下:
以这种方式访问将会导致许多负面影响。
www.services.com/serviceA
www.services.com/serviceB
我們將設定使其可以透過網路進行訪問。
使用Ingress
尽管我并没有深入理解,但从下面看来,使用Ingress功能似乎是实现这一目标的好方法。
我会尽快进行设置。
假设服务A和服务B已经部署好了。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /serviceA
backend:
serviceName: service-a
servicePort: 8080
- path: /serviceB
backend:
serviceName: service-b
servicePort: 8081
kubectl apply -f ingress-sample.yaml
不动了。
看起来,这个Ingress只是一个配置,要实际运行需要另外准备一个实体。
因此,我們將使用Nginx-Ingress-Controller。
使用Nginx-Ingress-Controller
查询后发现,官方已经写下了步骤。我会按照那个步骤试试看。
在本地环境中的步骤如下,只需两个命令即可完成。
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml
这样怎么样!
似乎还缺少了一些东西…
当我进行了一番调查后,我发现了这篇文章。
在Kubernetes中安装Nginx Ingress Controller
根据这篇文章的报道,
将node的IP指定为externalIPs
刚才我直接把在网上公开的yaml文件传给了kubectl,但现在我决定先将其下载到本地,然后再编辑相关部分。
$ wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
$ wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml
$ nano service-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
- name: https
port: 443
targetPort: 443
protocol: TCP
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
externalIPs: <-- ここを追加
- 192.168.0.xxx <-- ここを追加
根据这个设定,
$ kubectl apply -f mandatory.yaml
$ kubectl apply -f service-nodeport.yaml
我可以动了!
由於完全不明白的情況下一直在進行,所以遇到了相當大的困難,但一旦設置能夠運作起來,只需更改開頭的Ingress設定文件就能將服務分配給特定路徑,非常方便。
以上了。
辛苦了!