iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0
DevOps

k8s 生態鏈 完美組合系列 第 22

Day22 istio 模式下碰過的地雷

今天我來分享一些,之前在部署 istio 時,碰到的一些小地雷。

Service

首先大家不知道還記不記得這篇k8s Service 介紹。像下面這個設定黨

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  # type 有四種 ClusterIP, NodePort, LoadBalancer, ExternalName
  # 預設是 ClusterIP
  type: ClusterIP
  # 選擇帶有 "app=nginx" 的 pod
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    name: http-web
    targetPort: 80

裡面spec.ports.name 這個欄位在 istio 模式下是有意義的,之前我剛開始在練習部署時,就發現明明在原本模式都正常運作的服務,切換到 istio 模式下,發現原本要呼叫相應 api 的服務,通通都 request 不到,後來才發現,原來在 istio 模式下 name 是有意義的。

他的命名方式是 <protocol>[-<suffix>-],支援的 protocol 如下

  • grpc
  • grpc-web
  • http
  • http2
  • https
  • mongo
  • mysql*
  • redis*
  • tcp
  • tls
  • udp

憑證更新

這個功能會發生在 istio 1.6之前的版本,如果採用默認的 mtls,它會定期的自動更新,更新當下,如果有長連線的行為的服務,會中斷掉,這個對我們也困擾很久,大家可以對自己任一個服務下

$ kubectl exec $POD -c istio-proxy -n $NAMESPACE -- curl http://localhost:15000/certs | head -c 1000
Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 21292    0 21292    0     0   138k      0 --:--:-- --:--:-- --:--:--  144k
{
 "certificates": [
  {
   "ca_cert": [
    {
     "path": "./var/run/secrets/istio/root-cert.pem",
     "serial_number": "e9637e5fba66f5bdef5c49a3174f4a60",
     "subject_alt_names": [],
     "days_until_expiration": "3647",
     "valid_from": "2020-09-28T01:21:47Z",
     "expiration_time": "2030-09-26T01:21:47Z"
    }
   ],
   "cert_chain": [
    {
     "path": "\u003cinline\u003e",
     "serial_number": "cfc8a63c1161ce98200ad46c98d553b1",
     "subject_alt_names": [
      {
       "uri": "spiffe://cluster.local/ns/test-istio/sa/default"
      }
     ],
     "days_until_expiration": "0",
     "valid_from": "2020-09-30T01:12:39Z",
     "expiration_time": "2020-10-01T01:12:39Z"
    }
   ]
  },
  {
   "ca_cert": [
    {
     "path": "\u003cinline\u003e",
     "serial_number": "e9637e5fba66f5bdef5c49a3174f4a60",
     "subject_alt_names": [],
     "days_until_expiration": "3647",
     "valid_from": "2020-09-28T01:21:47Z",
     "expiration_time": "2030-09-26T01:21:47Z"
    }
   ],
   "cer%

主要以 cert_chain 的 expiration_time 為主。 他憑證一定會在那個時間之前就做自動更新的動作

1.6 之後的版本,他更新憑證不會造成連線中斷。

但是如果原本是用 1.6 之前的版本,要注意 1.6 是一個很大的分歧點,istio 在 1.6 做了很大的更新,架構上差異極大,甚至安裝方式也跟之前有差異,所以有需要升級的要注意這一點。


上一篇
Day21 測試看看 grpc 在 istio 的 loadbalance
下一篇
Day23 istio gateway 是什麼?
系列文
k8s 生態鏈 完美組合30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言