Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud Service Mesh:ASM ağ geçidinde HTTPS'yi etkinleştirin

Son Güncelleme:Oct 07, 2026

Harici istemciler için şifreli erişim sağlamak amacıyla ASM ağ geçidinde HTTPS'yi etkinleştirebilirsiniz. ASM ağ geçitleri, özel anahtarları, sunucu sertifikalarını ve kök sertifikaları gerçek zamanlı olarak yapılandırmanıza olanak tanıyan dinamik sertifika yüklemeyi destekler. Bu yöntem, ağ geçidini yeniden başlatma veya Secret birim bağlamalarına (Secret volume mounts) başvurma gereksinimini ortadan kaldırarak operasyonel karmaşıklığı azaltır ve hizmet kesintisi riskini önler. ASM ağ geçitleri birden fazla sertifika ve özel anahtar çiftini izleyip yönetebilir; bu sayede farklı ana bilgisayarlar için esnek ve güvenli iletişim sağlar ve veri iletiminin güvenliğini artırır.

Önkoşullar

Arka plan bilgileri

Istio, dinamik sertifika yüklemeyi destekler. Aktarım Katmanı Güvenliği (TLS) için gereken özel anahtar, sunucu sertifikası ve kök sertifikası, ağ geçidi yeniden başlatılmadan dinamik olarak yapılandırılabilir. Bir ASM ağ geçidi, kendi ad alanındaki Secret'ları izler ve bunları Gateway özel kaynağı (CR) aracılığıyla dinamik olarak yükler. ASM ağ geçidinde HTTPS kullanmanın aşağıdaki avantajları vardır:

  • Giriş ağ geçidi, gerekli sertifikaları, özel anahtarları veya ilgili kök sertifikaları yeniden başlatma olmadan dinamik olarak ekleyebilir, silebilir veya güncelleyebilir.

  • Secret birim bağlamalarına gerek yoktur. Bir Kubernetes Secret'ı oluşturduktan sonra ASM ağ geçidi bunu algılar ve sertifikasını, özel anahtarını veya kök sertifikasını giriş ağ geçidine gönderir.

  • Bir ASM ağ geçidi birden fazla sertifika ve özel anahtar çiftini izleyebilir. Tek yapmanız gereken, birden fazla ana bilgisayar için Secret'lar oluşturmak ve Gateway yapılandırmasını güncellemektir.

Adım 1: Sertifikaları ve özel anahtarları hazırlayın

Bir alan adı kullanırken, bu alan adının herkese açık olarak erişilebilir olduğundan emin olmak için Internet Content Provider (ICP) kaydı gerekebilir. Bu konuda örnek olarak aliyun.com kullanılarak bir sertifika ve özel anahtar oluşturulacak ve bunlar bir Secret olarak kaydedilecektir.

Zaten aliyun.com için bir sertifikanız ve özel anahtarınız varsa, anahtarı aliyun.com.key ve sertifikayı aliyun.com.crt olarak yeniden adlandırın. Yoksa, bir sertifika ve anahtar oluşturmak için openssl kullanın.

  1. Kök sertifika ve özel anahtar oluşturmak için aşağıdaki komutu çalıştırın.

    openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt 
  2. aliyun.com için sunucu sertifikası ve özel anahtar oluşturmak üzere aşağıdaki komutları çalıştırın.

    openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization"
    openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt
  3. ASM örneğinizin sürümüne göre bir Secret veya sertifika oluşturun.

    • v1.17'den önceki ASM örnekleri için

      Giriş ağ geçidinin kümesi için kubeconfig dosyasını kullanarak, istio-system ad alanında sertifika ve özel anahtarı içeren bir Secret oluşturmak için aşağıdaki komutu çalıştırın.

      kubectl create -n istio-system secret tls myexample-credential --key=aliyun.com.key --cert=aliyun.com.crt
      Önemli

      Secret adı istio veya prometheus ile başlamamalı ve token alanını içeremez.

    • v1.17 ve sonraki sürümlerdeki ASM örnekleri için

      1. ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini belirleyin.

      2. Mesh Management sayfasında hedef ASM örneğinin adını tıklayın. Sol gezinme bölmesinde ASM Gateways > Certificate Management seçeneğini belirleyin.

      3. Certificate Management sayfasında Create seçeneğini tıklayın. Certificate Information panelinde aşağıdaki parametreleri ayarlayın ve OK seçeneğini tıklayın.


        Parameter


        Description


        Name


        Sertifika için bir ad girin. Bu örnekte myexample-credential kullanılır.


        Public Key Certificate


        Alt adım 2 içinde oluşturulan aliyun.com.crt dosyasının içeriği.


        Private Key


        Alt adım 2 içinde oluşturulan aliyun.com.key dosyasının içeriği.

Adım 2: a.aliyun.com için arka uç hizmetini tanımlayın

Bu örnekteki arka uç hizmeti NGINX kullanır. a.aliyun.com arka uç hizmeti için /hello yoluna yapılan istekler, durum kodu 200 ile Welcome to a.aliyun.com! dizesini döndürür. Aşağıda myexample-nginx.conf dosyasının içeriği verilmiştir.

events {
}
http {
  log_format main '$remote_addr - $remote_user [$time_local]  $status '
  '"$request" $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';
  access_log /var/log/nginx/access.log main;
  error_log  /var/log/nginx/error.log;
  server {
    listen 80;
    location /hello {
        return 200 'Welcome to a.aliyun.com!';
        add_header Content-Type text/plain;
    }
  }
}
  1. Giriş ağ geçidinin kümesi için kubeconfig dosyasını kullanarak, NGINX sunucu yapılandırması için bir Kubernetes ConfigMap oluşturmak üzere aşağıdaki komutu çalıştırın.

    kubectl create configmap myexample-nginx-configmap --from-file=nginx.conf=./myexample-nginx.conf
  2. Varsayılan ad alanı için otomatik yan proxy enjeksiyonunu etkinleştirin. Daha fazla bilgi için bkz. Otomatik yan proxy enjeksiyonunu etkinleştirme.

  3. myexampleapp.yaml adlı bir dosya oluşturun ve aşağıdaki içeriği bu dosyaya ekleyin. Ardından, a.aliyun.com alan adı için arka uç hizmetini oluşturmak amacıyla kubectl apply -f myexampleapp.yaml komutunu çalıştırın.

    YAML'i görüntüle

    apiVersion: v1
    kind: Service
    metadata:
      name: myexampleapp
      labels:
        app: myexampleapp
    spec:
      ports:
      - port: 80
        protocol: TCP
      selector:
        app: myexampleapp
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myexampleapp
    spec:
      selector:
        matchLabels:
          app: myexampleapp
      replicas: 1
      template:
        metadata:
          labels:
            app: myexampleapp
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80
            volumeMounts:
            - name: nginx-config
              mountPath: /etc/nginx
              readOnly: true
          volumes:
          - name: nginx-config
            configMap:
              name: myexample-nginx-configmap

Adım 3: b.aliyun.com için arka uç hizmetini tanımlayın

Bu örneğin arka uç hizmeti httpbin kullanır.

  1. httpbin.example.yaml adlı bir dosya oluşturun ve aşağıdaki içeriği bu dosyaya kopyalayın.

    YAML'i görüntüle

    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      labels:
        app: httpbin
    spec:
      ports:
      - name: http
        port: 8000
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          containers:
          - image: docker.io/citizenstig/httpbin
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
  2. Giriş ağ geçidi pod'unun bulunduğu küme için kubeconfig dosyasını kullanarak, b.aliyun.com alan adı için arka uç hizmetini oluşturmak üzere aşağıdaki komutu çalıştırın.

    kubectl apply -f httpbin.example.yaml

Adım 4: Gateway kaynağı oluşturun

  1. ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini belirleyin.

  2. Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde ASM Gateways > Gateway seçeneğini belirleyin. Görüntülenen sayfada Create from YAML seçeneğini tıklayın.

  3. Create sayfasında hedef ad alanını (bu örnekte default) ve herhangi bir Scenario Template seçin. Ardından aşağıdaki YAML'i girin ve Create seçeneğini tıklayın.

    YAML'i görüntüle

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: mysdsgateway
    spec:
      selector:
        istio: ingressgateway # use istio default ingress gateway
      servers:
      - port:
          number: 443
          name: https
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: myexample-credential # must be the same as secret
        hosts:
        - '*.aliyun.com'
                                    

    Kaynak oluşturulduktan sonra yeni ağ geçidi Gateway sayfasında görünür.

Adım 5: VirtualService'ler oluşturun

  1. ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini belirleyin.

  2. Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde Traffic Management Center > VirtualService seçeneğini belirleyin. Görüntülenen sayfada Create from YAML seçeneğini tıklayın.

  3. Create sayfasında hedef Namespaces ve herhangi bir Scenario Template seçin. Ardından aşağıdaki YAML'i girin ve Create seçeneğini tıklayın.

    YAML'i görüntüle

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: mysdsgateway-myexamplevs
    spec:
      hosts:
      - "a.aliyun.com"
      gateways:
      - mysdsgateway
      http:
      - match:
        - uri:
            exact: /hello
        route:
        - destination:
            host: myexampleapp.default.svc.cluster.local
            port:
              number: 80      

    b.aliyun.com için bir VirtualService oluşturmak üzere bu adımı tekrarlayın.

    YAML'i görüntüle

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: mysdsgateway-httpbinvs
    spec:
      hosts:
      - "b.aliyun.com"
      gateways:
      - mysdsgateway
      http:
      - match:
        - uri:
            prefix: /status
        - uri:
            prefix: /delay
        route:
        - destination:
            port:
              number: 8000
            host: httpbin.default.svc.cluster.local        

    Sanal hizmetler oluşturulduktan sonra VirtualService sayfasında görünürler.

Sonuçları doğrulayın

Giriş ağ geçidi hizmet adresini alın

  • Yöntem 1: Adresi ASM konsolu üzerinden görüntüleyin. ASM konsolunda oturum açın, hedef Service Mesh örneğini seçin ve ardından sol gezinme bölmesinde ASM Gateways > Ingress Gateway seçeneğini belirleyin. Ingress Gateway sayfasında gerekli bilgileri görüntüleyin.

  • Yöntem 2: Adresi ACK konsolu üzerinden görüntüleyin. Daha fazla bilgi için bkz. Giriş ağ geçidiyle ilgili hizmet bilgilerini görüntüleme.

Komut satırı üzerinden giriş ağ geçidine erişin

  • a.aliyun.com hizmetine HTTPS üzerinden erişmek için aşağıdaki komutu çalıştırın.

    curl -k -H Host:a.aliyun.com --resolve a.aliyun.com:443:{REPLACE_WITH_THE_INGRESS_GATEWAY_IP_ADDRESS}  https://a.aliyun.com/hello

    Beklenen çıktı:

    Welcome to a.aliyun.com!
  • b.aliyun.com hizmetine HTTPS üzerinden erişmek için aşağıdaki komutu çalıştırın.

    curl -k -H Host:b.aliyun.com --resolve b.aliyun.com:443:{REPLACE_WITH_THE_INGRESS_GATEWAY_IP_ADDRESS}  https://b.aliyun.com/status/418  

    Beklenen çıktı:

        -=[ teapot ]=-
           _...._
         .'  _ _ `.
        | ."` ^ `". _,
        \_;`"---"`|//
          |       ;/
          \_     _/
            `"""`

İlgili işlemler

Ağ geçidi sertifikasını güncelleyin

Bir ağ geçidine monte edilen sertifikayı güncellemek için veri düzleminde yeni bir Secret oluşturun ve ardından Gateway kaynağında bulunan credentialName alanının değerini yeni Secret'ın adıyla değiştirin. Ağ geçidi yeni Secret'ı otomatik olarak monte eder. Bu örnek, example.com sunucusu için new-istio-ingressgateway-certs adlı bir Secret'ın nasıl oluşturulacağını göstermektedir.

  1. Vereni myexample olan bir sertifika oluşturun.

    1. OpenSSL aracında kök sertifika ve özel anahtar oluşturmak için aşağıdaki komutu çalıştırın.

      openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=example.com' -keyout example.root.key -out example.root.crt
    2. example.com sunucusu için sunucu sertifikası ve özel anahtar oluşturmak üzere aşağıdaki komutları çalıştırın.

      openssl req -out example.com.csr -newkey rsa:2048 -nodes -keyout example.com.key -subj "/CN=example.com/O=myexample organization"
      openssl x509 -req -days 365 -CA example.root.crt -CAkey example.root.key -set_serial 0 -in example.com.csr -out example.com.crt
    3. Kümenin kubeconfig dosyasını edinin ve kubectl kullanarak kümeye bağlanın.

    4. new-istio-ingressgateway-certs adlı bir Secret oluşturmak için aşağıdaki komutu çalıştırın.

      kubectl create -n istio-system secret tls new-istio-ingressgateway-certs --key example.com.key --cert example.com.crt
  2. Eski sertifika Secret'ını silmek için kümede aşağıdaki komutu çalıştırın.

    kubectl delete secret  istio-ingressgateway-certs -n istio-system
  3. Gateway kaynağını güncelleyin.

    1. ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini belirleyin.

    2. Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde ASM Gateways > Gateway seçeneğini belirleyin.

    3. Gateway sayfasında hedef Gateway kaynağını bulun ve Actions sütunundaki View YAML seçeneğini tıklayın.

    4. edit iletişim kutusunda credentialName değerini yeni sertifika Secret adı olan new-istio-ingressgateway-certs ile değiştirin ve ardından OK seçeneğini tıklayın.

  4. Ağ geçidi sertifikasının güncellendiğini doğrulayın.

    1. Kümedeki geçerli sertifika bilgilerini görüntülemek için aşağıdaki komutu çalıştırın.

      kubectl exec istio-ingressgateway-xxxx -n istio-system -- curl localhost:15000/config_dump  > ingressgateway_dump.yaml
    2. new-istio-ingressgateway-certs sertifikasını yazdırmak ve aramak için aşağıdaki komutu çalıştırın.

      cat ingressgateway_dump.yaml | grep new-istio-ingressgateway-certs -A 3

      Beklenen çıktı:

      "name": "kubernetes://new-istio-ingressgateway-certs",
      "tls_certificate": {
        "certificate_chain": {
          "inline_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...xxx...LS0tLS1FTkQgQ0VSVElGSUNBVEUt"
        }
      }

      Base64 ile kodlanmış sertifikayı elde etmek için inline_bytes parametresinden sonraki içeriği kopyalayın.

    3. Sertifikayı Base64 ile çözmek için yerel komut satırı aracınızda aşağıdaki komutu çalıştırın.

      echo <Base64-encoded-certificate-content> | base64 --decode
    4. Çözülen içeriği test.com.crt dosyası olarak kaydedin.

    5. Sertifikanın organizasyonunu görüntülemek için OpenSSL aracında aşağıdaki komutu çalıştırın.

      openssl x509 -in test.com.crt -text -noout

      Beklenen çıktı:

      Certificate:
          Data:
              Version: 1 (0x0)
              Serial Number: 0 (0x0)
              Signature Algorithm: sha256WithRSAEncryption
              Issuer: O = myexample Inc., CN = example.com
              Validity
                  Not Before: Mar 17 03:20:27 2022 GMT
                  Not After : Mar 17 03:20:27 2023 GMT
              Subject: CN = example.com, O = myexample organization

      Organizasyonun başarıyla myexample olarak değiştirildiğini görebilirsiniz; bu, ağ geçidi sertifikasının başarıyla güncellendiği anlamına gelir.