イングレスはじめは
通常、クラスタ内のサービスやポッドは、内部ネットワークのIPアドレス、クラスタアクセスできない外部ネットワークを介してアクセスすることができます。サービスのNodePortタイプの使用、あなたが外部アクセスチャネルをオンにすることができますが、あまりにもあまりにも多くの管理を助長されていませんとき、クラスタサービス内のノード上のサービスポートにつながることができますが。
イングレスは、「nginxの」K8Sクラスタ境界上のプロキシとして理解することができ、あなたが侵入、内部クラスタサービスのリソースへの最終的に外部からのアクセスを実現するなど、URL、SSL、ドメイン名に基づいてルールを転送するさまざまな設定することができます。
あなたは外国エクスポージャーのクラスタを達成するための唯一のポート、複数のサービスを使用できるように
入力コントローラおよび入力サービス:入力は、2つのコンポーネントで構成されています。
ingress controller的本质是一个运行负载均衡器的Pod
traefik進入コントローラをベース侵入コントローラベースのサービスと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