Service資源是為動態管理的Pod對象添加一個固定訪問入口。
service通過標籤選擇器關聯至擁有相關標籤的Pod對象
客戶端向Service進行請求,而非目標Pod對象,當Service資源變動時,有kube-proxy控制器將規則應用至本機iptables或者ipvs規則。
而kube-proxy為DaemonSet 控制器將會在集群中每個節點運行一個Pod或者守護進程 如果需要轉換ipvs規則,則需要手動加載ipvs模塊進入內核
iptables代理模式,對於每個Service對象,kube-proxy會創建iptables規則直接捕獲到達cluster ip和Port流量,並將其重定向至當前Service對象的後端Pod資源,對於每個Endpoint對象,Service資源會為其創建iptables規則並關聯
ipvs代理模式 kube-proxy跟蹤API server上 Service和Endpoints(ip+port)對象變動,來調用netlink接口創建ipvs規則,並確保於API server中變動同步,於iptables規則不同之處僅在處於其請求流量的調度功能有ipvs實現,餘下的其他功仍然由iptables完成
[root@node1 ~]ports欄位定義svc埠與後端哪個埠相關連 - name: http svc埠 targetPort: 80自定義nodePort埠 selector:NodePort可以定義一個埠給外部範圍 kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d5hmyweb NodePort 10.100.112.31 <none> 80:30593/TCP 2d1h[root@node1 chapter5] curl 10.105.226.215Hello MyApp | Version: v2 | <a href=&34;>Pod Name</a>[root@node1 chapter5] vim ingress-svc.yml apiVersion: v1kind: Servicemetadata: name: ingress namespace: ingress-nginxspec: selector: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx ports: - name: http port: 80 - name: https port: 443 type: NodePort
部署svc使其外部網絡能夠訪問至ingress
創建後端pod,並為pod指定svc資源
[root@node1 ~]資源類型metadata: 此欄位為資源註解,作為配置信息提供方 kubernetes.io/ingress.class: &34;spec: 定義後端主機 - http: 定義後端資源 paths: - path: / 後端資源 serviceName: myapp 此為svc埠
創建成功,會自動關聯至myapp此svc,且會綁定後端資源
此時直接訪問宿主機即可訪問後端資源
使用https訪問
openssl genrsa -out myapp.key 2048 生成私鑰openssl req -new -x509 -key myapp.key -out myapp.crt -subj /C=CN/ST=Beijing/L=Beijing/O=ops/CN=www.node.com -days 365 kubectl create secret tls ilinux-cert -n myns --cert=myapp.crt --key=myapp.keysecret/ilinux-cert created 34;nginx&引用證書 - hosts: secre資源的名稱。就是我們剛才創建的k8s資源 rules: [root@node1 ~]#連接至pod內容器,配置文件會自動填充我們定義的ingress的配置
原文來自:http://dwz.date/caJN
作者: woaiyitiaochai