國產恐怖遊戲《人窟日記》上架Steam 以本土題材為背景
阿新 • • 發佈:2021-06-02
Ingresss是k8s叢集中的一個API資源物件,扮演邊緣路由器(edge router)的角色,也可以理解為叢集防火牆、叢集閘道器,可以自定義路由規則來轉發、管理、暴露一組Pod。
kubernetes處理這種場景時,涉及到三個元件:
1、反向代理web伺服器
負責攔截外部請求,一般是以Deployment或DeamonSet的方式部署到kubernetes叢集中的Nginx、Apache等
通常以NodePort或HostNetwork方式對k8s之外暴露
由於所在主機IP不確定,因此一般需要新增約束讓其執行在固定的一批主機上,並在上層新增負載均衡
2、Ingress controller
實時感知Ingress路由規則集合的變化,再與apiserver互動,獲取Service、Pod在叢集中的IP等資訊,然後傳送給反向代理web伺服器,重新整理其路由配置資訊
常用ingress controller包括:
①Kubernetes社群釋出的 ingress-nginx和Nginx公司釋出的kubernetes-ingress
使用nginx作為代理,但貌似nginx和Ingress controller在一個Pod裡
②Traefik Kubernetes Ingress provider
使用traffic proxy進行代理
還提供了友好的控制面板和監控介面,不僅可以方便地檢視Traefik根據Ingress生成的路由配置資訊,還可以檢視統計的一些效能指標資料,如:總響應時間、平均響應時間、不同的響應碼返回的總次數等。
Traefik還支援豐富的annotations配置,可配置眾多出色的特性,例如:自動熔斷、負載均衡策略、黑名單、白名單
3、Ingress
定義路由規則集合。
示例:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: name-virtual-host-ingress-no-third-host spec: IngressClassName: xx rules: - host: first.bar.com http: paths: - pathType: Prefix path: "/" backend: service: name: service1 port: number: 80 - host: second.bar.com http: paths: - pathType: Prefix path: "/" backend: service: name: service2 port: number: 80 - http: paths: - pathType: Prefix path: "/" backend: service: name: service3 port: number: 80(1)IngressClassName用於指定一個IngressClass:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: external-lb
spec:
controller: example.com/ingress-controller
parameters:
apiGroup: k8s.example.com
kind: IngressParameters
name: external-lb
namespace: external-configuration
scope: Namespace/Cluster
將IngressClass的annotation新增ingressclass.kubernetes.io/is-default-class:true,可以將其設定為叢集預設IngressClass,沒有指定IngressClass的Ingress都會使用它
(2)每條rule=host(可選)+IngressRuleValue
host必須為域名,即必須通過{域名}:{反向代理伺服器對外暴露的埠}訪問反向代理伺服器
如果沒有DNS,則需要在訪問方的hosts檔案中新增反向代理伺服器所在主機IP-域名的對映關係,
host一旦配置為某個域名(或使用如*.foo.com這樣的萬用字元匹配一批域名),則這條rule僅適用於訪問該域名的請求
IngressRuleValue目前只有HTTPIngressRuleValue一種,由若干HTTPIngressPath組成,每個HTTPIngressPath包括:
- path
- pathType
- backend
backend:
resource:
apiGroup: k8s.example.com
kind: StorageBucket
name: icon-assets
綜上,該Ingress意味著:所有訪問first.bar.com的流量轉向Service1,所有訪問second.bar.com的流量轉向Service2,請求頭裡沒有域名的流量轉向Service3
進行https解除安裝
首先建立Secret:
apiVersion: v1
kind: Secret
metadata:
name: testsecret-tls
namespace: default
data:
tls.crt: base64 編碼的 cert
tls.key: base64 編碼的 key
type: kubernetes.io/tls
在Ingress中配置tls:
spec:
tls:
- hosts:
- https-example.foo.com
secretName: testsecret-tls
這樣,ingress與service之間的連線就從https變為了http