六、イングレス・マネジメントのkubernetes

イングレスはじめは
通常、クラスタ内のサービスやポッドは、内部ネットワークのIPアドレス、クラスタアクセスできない外部ネットワークを介してアクセスすることができます。サービスのNodePortタイプの使用、あなたが外部アクセスチャネルをオンにすることができますが、あまりにもあまりにも多くの管理を助長されていませんとき、クラスタサービス内のノード上のサービスポートにつながることができますが。

イングレスは、「nginxの」K8Sクラスタ境界上のプロキシとして理解することができ、あなたが侵入、内部クラスタサービスのリソースへの最終的に外部からのアクセスを実現するなど、URL、SSL、ドメイン名に基づいてルールを転送するさまざまな設定することができます。
あなたは外国エクスポージャーのクラスタを達成するための唯一のポート、複数のサービスを使用できるように

入力コントローラおよび入力サービス:入力は、2つのコンポーネントで構成されています。
ingress controller的本质是一个运行负载均衡器的Podtraefik進入コントローラをベース侵入コントローラベースのサービスとnginxの2つの主要ながあります。

ワークス
受信するように構成された入口サービスとストアユーザ定義の転送ルール、および通知K8SのAPIサーバ。

APIサーバのリアルタイムの相互作用の入口コントローラとK8Sの動的なサービス対応の入力転送ルールの変更とは、新しい転送ルールを読み、その後、ロードバランサに書き込まれ、ロードバランサの設定ファイルの設定形式を押すと、リロードその新しい設定が有効になります。

ingress用于设定转发规则,ingress controller为pod应用这些规则。ingress controller建议设置为daemonset控制器部署,这些Pod设置NodePort类型的Service

イングレスタイプ

シングルサービスイングレス
バックエンドは、直接クラスタにはルールを作成していないことで、デフォルトのサービスの外部に露出されています。
デフォルトのサービス・フィールドが定義されspec.backend、以下のように、たとえば、

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
spec:
  backend:
    serviceName: testsvc
    servicePort: 80

URLベースのトラフィック転送パス

apiVersion: extensions/v1beta1
kind: Ingress
metadata: 
	name: test-ingress
spec:
	rules:    ##列表rules是一个列表,保存多条转发规则
	- http:   ##定义一条转发规则
		paths:
		- path: /test  ##针对此url进行转发至后端服务,后端服务上需要有此path,否则需要rewrite处理。下面会再举例
		  backend:   ##定义后端服务
		  	serviceName: test   ##后端提供服务的service的name
		  	servicePort: 80     ##后端提供服务的service的port

后端服务没有对应的路径test最初の書き換え処理を実行します。

apiVersion: extensions/v1beta1
kind: Ingress
metadata: 
	name: test-ingress
	annotations:           #注解信息
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite /test /hostname.html break;
spec:
	rules:    ##列表rules是一个列表,保存多条转发规则
	- http:   ##定义一条转发规则
		paths:
		- path:   
		  backend:   ##定义后端服务
		  	serviceName: test   ##后端提供服务的service的name
		  	servicePort: 80     ##后端提供服务的service的port

ホストベースの仮想ホスト名

apiVersion: extensions/v1beta1
kind: Ingress
metadata: 
	name: test-ingress
	rules:    ##列表rules是一个列表,保存多条转发规则
	- host: myapp.magedu.com
	  http:   ##定义一条转发规则
		paths:
		- path:   
		  backend:   ##定义后端服务
		  	serviceName: test   ##后端提供服务的service的name
		  	servicePort: 80     ##后端提供服务的service的port

配備進入コントローラ
アーキテクチャが示されています
ここに画像を挿入説明
バックエンドサービスを展開
アクセスされたバックエンドサービスの安定性を確保するために、サービスポッドエンドバックを提供することで、サービスであるため、新たなポッドやサービスを作成する必要があります。注意后端服务无需使用ingress-nginx的名称空间定義の、以下のリスト

apiVersion: v1
kind: Service
metadata:
   name: ngx-service
spec:
   selector:
     app: ngx
   ports:
     - protocol: TCP
       port: 80
       targetPort: 80
---
apiVersion: apps/v1
kind: deployment
metadata:
   name: ngx-deployment
   labels:
      app: ngx
spec:
   replicas: 2
   selector:
      matchLabels:
         app: ngx
   template:
      metadata:
         labels:
           app: ngx
      spec:
         containers:
         - name: ngxv2
           image: 192.168.80.146:5000/my_ngx:v2

作成し、確認した後、結果を表示

[root@k8s-master ingress-nginx]# kubectl get pod
NAME                              READY     STATUS    RESTARTS   AGE
ngx-deployment-58d847f49c-9tbwh   1/1       Running   0          1d
ngx-deployment-58d847f49c-vvnrj   1/1       Running   0          1d

[root@k8s-master ingress-nginx]# kubectl get services
NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes        ClusterIP   10.96.0.1       <none>        443/TCP        9d
ngx-service   ClusterIP    10.106.74.134   <none>        80/TCP   1d

侵入コントローラの展開

サービスの入口コントローラの展開
今も手作業で侵入コントローラのための1つを作成するために必要なサービスを提供するために、イングレス・コントローラによってNodePort类型的service、クラスタ外部のトラフィックを受信します。以下のように設定リストがあります

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
      nodePort: 30081
    - name: https
      port: 443
      targetPort: 443
      protocol: TCP
      nodePort: 30443
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

作成し、確認した後、結果を表示

[root@k8s-master ingress-nginx]# kubectl get -n ingress-nginx services
NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   NodePort   10.102.208.10   <none>        80:30081/TCP,443:30443/TCP   2h

侵入の展開
ルール入力コントローラの転送の構成

apiVersion: extensions/v1beta1      #api版本
kind: Ingress       #清单类型
metadata:           #元数据
  name: ingress-myapp    #ingress的名称
  namespace: default     #所属名称空间
  annotations:           #注解信息
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite /test /hostname.html break;
    kubernetes.io/ingress.class: "nginx"
spec:      #规格
  rules:   #定义后端转发的规则
  - host: myapp.magedu.com
    http:
      paths:       
      - path:       #配置访问路径,如果通过url进行转发,需要修改;空默认为访问的路径为"/"
        backend:    #配置后端服务
          serviceName: ngx-service
          servicePort: 80

作成し、確認した後、結果を表示

[root@k8s-master ingress-nginx]# kubectl get -n ingress-nginx pods
NAME                                        READY     STATUS    RESTARTS   AGE
nginx-ingress-controller-5c54df76f6-qktts   1/1       Running   0          2h

##进入ingress controller的Pod内部查看nginx配置文件
[root@k8s-master ingress-nginx]# kubectl exec -n ingress-nginx -it  nginx-ingress-controller-5c54df76f6-qktts  /bin/bash
www-data@nginx-ingress-controller-5c54df76f6-qktts:/etc/nginx$ cat nginx.conf
.....
## start server myapp.magedu.com
    server {
        server_name myapp.magedu.com ;
        
        listen 80;
        
        set $proxy_upstream_name "-";
        
        location / {
            
            set $namespace      "default";
            set $ingress_name   "ingress-myapp";
            set $service_name   "myapp";
            set $service_port   "80";
            set $location_path  "/";
.....

使用は、TLS
転送ルールにHTTPSを使用するように構成された、あなたはホストを指定することができますし、secretNameはでspec.tlsで使用される;
secretNameのストアの証明書を作成します

kubectl create secret tls tls-myapp --key tls.key --cert tls.crt
tls:
- hosts:
  -  myapp.magedu.com
  secretName: tls-myapp

概要
クラスタからローカルのhostsファイルを変更するために、検証のためにアクセスを開始

[root@192-168-80-114 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.80.147  k8s-node2 myapp.magedu.com
192.168.80.140  k8s-node1 myapp.magedu.com
[root@192-168-80-114 ~]# curl myapp.magedu.com:30081
ngx-deployment-58d847f49c-vvnrj
[root@192-168-80-114 ~]# curl myapp.magedu.com:30081
ngx-deployment-58d847f49c-9tbwh
公開された40元の記事 ウォンの賞賛2 ビュー2098

おすすめ

転載: blog.csdn.net/weixin_42155272/article/details/90268309