ＡＫＳ1.24からプローブのプロトコル仕様が変わる件

### リリースノート

プローブのプロトコルの変更、についてリリースノートに言及があり、
https://github.com/Azure/AKS/releases/tag/2022-09-11
気になって問い合わせて以下の情報が返ってきた。
https://cloud-provider-azure.sigs.k8s.io/topics/loadbalancer/#custom-load-balancer-health-probe

```
Kubernetes バージョン ＜= 1.23 の場合
Service のアノテーションが設定されていない場合、プローブのプロトコルに TCP が使用されます
アノテーションが設定されている場合は、プロトコルは spec.ports.appProtocol (http/https) が使用され、
アノテーションで指定されたパスにプローブのリクエストが送信されます

Kubernetes バージョン ＞ 1.24 の場合
Service のアノテーションが設定されていない場合、プローブのプロトコルに spec.ports.appProtocol` (http/https) が使用され、
リクエスト パスには / が使用されます
アノテーションが設定されている場合は、プロトコルは spec.ports.appProtocol` (http/https) が使用され、
アノテーションで指定されたパスにプローブのリクエストが送信されます
```

### externalTrafficPolicy が localの場合
対応なし

```
Service のマニフェストを拝見させていただきましたところ、 externalTrafficPolicy が local 設定でございましたので、
/healthz に対して、HTTP プローブがされておりますことを確認いたしました。
今回の変更の影響は externalTrafficPolicy が cluster のものが影響をうけます。

```

ということで平和だった。

### 特になにも設定していないingress-nginxのhelmチャートそのまま入れた場合
#### 状況
STGを1.24に上げたところサイトが見えない状態で、ingress-nginxのPodのログに以下のようなメッセージが出てた。

```
W0213 06:26:54.326428       7 controller.go:1083] Service "default/sample-backendserver" does not have any active Endpoint.
```

公式のインストール方法を確認すると、
https://learn.microsoft.com/ja-jp/azure/aks/ingress-basic?tabs=azure-cli
以下のオプションを設定しているように見えます。

--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz

なので、以下のアップデート方法でいいすか？というのをserviceのマニフェストなどを添付してSR問い合わせして確認したところ
それでOKっぽい返事が。

```
helm list
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm upgrade  --install ingress-nginx ingress-nginx/ingress-nginx \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz
helm list
```


serviceの状態とかを見るとこんな感じになっている。
80:31858/TCP,443:32418/TCP 

ちなみに、helmで入れられていたingress-nginxの設定オプションはついてなさそうにはみえた。
```
$ helm list
NAME            NAMESPACE       REVISION        UPDATED                                         STATUS          CHART                   APP VERSION
base-chart      default         5               2022-11-04 13:31:19.153007 +0900 +0900          deployed        base-chart-1.0.0                   
sample-nginx    default         1               2022-02-21 17:36:59.589264879 +0900 +0900       deployed        ingress-nginx-4.0.17    1.1.1  

$ helm get values sample-nginx
USER-SUPPLIED VALUES:
null
```

#### Loadbalancerの正常性プローブの状態

AKSのポータルの管理画面のプロパティからVMSSとかのリソースのあるリソースグループのリンクを踏んでそのあたりのLBを確認する
と正常性プローブというメニューがあってプロトコルがわかる。（STG/PRODで異なってた）



マニフェストやServiceやIngressやPodの状態は特にエラーとかでてないんだけど
ingressのPodへのアクセスはきてなかった


#### おへんじ抜粋

```
<実行例>
helm upgrade ingress-nginx ingress-nginx/ingress-nginx \
  --namespace $NAMESPACE \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz
  
＜＜公開情報＞＞ 
Title : AKS 1.24 アップグレード時にAzure Load Balancer の正常性プローブプロトコルが変更される
URL : https://jpaztech.github.io/blog/containers/aks-lb-probe-failed-after-upgraded-to-k8s-1.24/
```
https://jpaztech.github.io/blog/containers/aks-lb-probe-failed-after-upgraded-to-k8s-1.24/
#### 実際のAKSプローブ設定

SRで教えてもらったコマンド
```
NAMESPACE=default
helm upgrade ingress-nginx ingress-nginx/ingress-nginx \
  --namespace $NAMESPACE \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz
 ```

URL表示確認はさみつつ打ってみる


```
$ kubectl config get-contexts
$ kubectl get pods
NAME                                                    READY   STATUS    RESTARTS   AGE
sample-backendserver-fcc5d54d5-nh7b2                    1/1     Running   0          10d
sample-backendserver-queue-worker-7c97c7d77d-h6t4j      1/1     Running   0          10d
sample-frontendserver-c46b4b58-p8z9q                    1/1     Running   0          10d
sample-nginx-ingress-nginx-controller-86c854f84-9zph2   1/1     Running   0          10d

$ kubectl get service
$ kubectl get ingress

$ helm list
NAME            NAMESPACE       REVISION        UPDATED                                         STATUS          CHART                   APP VERSION
base-chart      default         5               2022-11-04 13:31:19.153007 +0900 +0900          deployed        base-chart-1.0.0                   
sample-nginx    default         1               2022-02-21 17:36:59.589264879 +0900 +0900       deployed        ingress-nginx-4.0.17    1.1.1      

$ helm repo list
Error: no repositories to show
$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories
$ helm repo list
NAME            URL                                       
ingress-nginx   https://kubernetes.github.io/ingress-nginx

$ helm search repo ingress-nginx
NAME                            CHART VERSION   APP VERSION     DESCRIPTION                                       
ingress-nginx/ingress-nginx     4.5.2           1.6.4           Ingress controller for Kubernetes using NGINX a...

$ helm get values sample-nginx
USER-SUPPLIED VALUES:
null

NAMESPACE=default
helm upgrade ingress-nginx ingress-nginx/ingress-nginx \
  --namespace $NAMESPACE \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz
```
このままだとリリース名が違うといわれるので名前変える

 ```
$ helm upgrade --help
～略～
Usage:
  helm upgrade [RELEASE] [CHART] [flags]
～略～
```
※RELEASEはhelm listでみたときの実際インストールしてる任意に名付けているhelmチャートのNAMEで、
　CHARTはhelm search repoでみたときのhelmリポジトリ上のチャートのNAME(ローカルリポジトリの場合は直下のディレクトリ名)で、
　flagsは設定上書きする変数ファイルとかdry-run的なほかのオプションを指定する
    
helm upgrade実行ログ

```
$ NAMESPACE=default
helm upgrade sample-nginx ingress-nginx/ingress-nginx \
  --namespace $NAMESPACE \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz

Release "sample-nginx" has been upgraded. Happy Helming!
NAME: sample-nginx
LAST DEPLOYED: Fri Feb 24 04:45:11 2023
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w sample-nginx-ingress-nginx-controller'

An example Ingress that makes use of the controller:
  apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    name: example
    namespace: foo
  spec:
    ingressClassName: nginx
    rules:
      - host: www.example.com
        http:
          paths:
            - pathType: Prefix
              backend:
                service:
                  name: exampleService
                  port:
                    number: 80
              path: /
    # This section is only required if TLS is to be enabled for the Ingress
    tls:
      - hosts:
        - www.example.com
        secretName: example-tls

If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:

  apiVersion: v1
  kind: Secret
  metadata:
    name: example-tls
    namespace: foo
  data:
    tls.crt: <base64 encoded cert>
    tls.key: <base64 encoded key>
  type: kubernetes.io/tls

$ helm list
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
base-chart      default         5               2022-11-04 13:31:19.153007 +0900 +0900  deployed        base-chart-1.0.0                   
sample-nginx    default         2               2023-02-24 04:45:11.59890333 +0000 UTC  deployed        ingress-nginx-4.5.2     1.6.4      

$ helm get values sample-nginx
USER-SUPPLIED VALUES:
controller:
  service:
    annotations:
      service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path: /healthz
```

```
$ kubectl get po
NAME                                                     READY   STATUS    RESTARTS   AGE
sample-backendserver-fcc5d54d5-nh7b2                     1/1     Running   0          10d
sample-backendserver-queue-worker-7c97c7d77d-h6t4j       1/1     Running   0          10d
sample-frontendserver-c46b4b58-p8z9q                     1/1     Running   0          10d
sample-nginx-ingress-nginx-controller-67d45d5c56-7pxhz   1/1     Running   0          4m20s

$ kubectl logs -f --tail=20 sample-nginx-ingress-nginx-controller-67d45d5c56-7pxhz
```

URL確認してログイン画面でるようになった


以上