0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AKS1.24からプローブのプロトコル仕様が変わる件

Posted at

リリースノート

プローブのプロトコルの変更、についてリリースノートに言及があり、
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/

実際の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確認してログイン画面でるようになった

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?