Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud Service Mesh:İş yüklerinde erişim kontrolü için yetkilendirme ilkelerini yapılandırın

Son Güncelleme:Oct 07, 2026

Varsayılan olarak, bir Service Mesh (ASM) örneğindeki iş yükleri birbirleriyle iletişim kurabilir. Bir kümedeki iş yükleri üzerinde erişim kontrolü ve izin yönetimi gerçekleştirmek için yetkilendirme ilkeleri oluşturabilirsiniz. Bu durumda, yalnızca belirli gereksinimleri karşılayan istekler iş yüklerine erişebilir. Örneğin, istek yollarını, istek yöntemlerini ve istemcilerin IP adreslerini belirterek iş yüklerine erişimi kontrol edebilirsiniz. Bu sayede güvenlik artırılır ve ASM örneğinin kaynakları korunur.

Önkoşullar

Küme, ASM örneğine eklenmiştir.

Özellik tanıtımı

Bir yetkilendirme ilkesinde CUSTOM, DENY veya ALLOW eylemini belirtebilirsiniz. Tek bir iş yüküne birden fazla yetkilendirme ilkesi uyguladığınızda, bu ilkelerin farklı öncelik seviyeleri bulunur. Daha açık ifade etmek gerekirse, sistem istekleri sırasıyla CUSTOM, DENY ve ALLOW yetkilendirme ilkelerine göre doğrular. Bir iş yükü için birden fazla yetkilendirme ilkesi oluşturursanız aşağıdaki kurallar geçerli olur:

  • Bir istek, isteği reddeden bir CUSTOM yetkilendirme ilkesindeki koşulla eşleşirse istek reddedilir.

  • Bir istek, isteği reddeden bir DENY yetkilendirme ilkesindeki koşulla eşleşirse istek reddedilir.

  • Varsayılan olarak, bir iş yükü için ALLOW yetkilendirme ilkesi yapılandırılmamışsa istek iş yüküne erişebilir.

  • Bir iş yükü için ALLOW yetkilendirme ilkesi yapılandırılmışsa ve bir istek ALLOW yetkilendirme ilkesindeki koşulla eşleşiyorsa istek iş yüküne erişebilir.

  • Bir istek önceki tüm gereksinimleri karşılamazsa istek reddedilir.

Bu konu, yetkilendirme ilkelerini hızlıca anlamanıza ve yapılandırmanıza yardımcı olmak için aşağıdaki dört örneği sunar:

Senaryo 1: Bir iş yükünün belirli bir yoluna erişimi kontrol etme

Bu örnekte, foo ad alanındaki uygulamaların HTTPBin uygulamasının /headers yoluna erişebilmesini belirten bir yetkilendirme ilkesi oluşturulur. HTTPBin uygulaması foo ad alanında bulunur. Diğer yollara yapılan istekler başarısız olur. foo dışındaki ad alanlarında bulunan uygulamalar HTTPBin uygulamasına erişemez.

Adım 1: default ve foo ad alanları için otomatik yan proxy enjeksiyonunu etkinleştirin

  1. default ve foo ad alanlarını oluşturun. Daha fazla bilgi için bkz. Ad alanı oluşturma.

  2. default ve foo ad alanları için otomatik yan proxy enjeksiyonunu etkinleştirin. Daha fazla bilgi için bkz. Otomatik yan proxy enjeksiyonunu etkinleştirme.

Adım 2: Test uygulamalarını dağıtın

  1. sleep uygulamasını default ve foo ad alanlarına dağıtın.

    1. Aşağıdaki içeriği içeren bir sleep.yaml dosyası oluşturun:

      Show the sleep.yaml file

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "3650d"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. sleep uygulamasını default ad alanına dağıtmak için aşağıdaki komutu çalıştırın:

      kubectl apply -f sleep.yaml -n default
    3. sleep uygulamasını foo ad alanına dağıtmak için aşağıdaki komutu çalıştırın:

      kubectl apply -f sleep.yaml -n foo
  2. HTTPBin uygulamasını foo ad alanına dağıtın.

    1. Aşağıdaki içeriği içeren bir httpbin.yaml dosyası oluşturun:

      Show the httpbin.yaml file

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: httpbin
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: httpbin
        labels:
          app: httpbin
          service: httpbin
      spec:
        ports:
        - name: http
          port: 8000
          targetPort: 80
        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:
            serviceAccountName: httpbin
            containers:
            - image: docker.io/kennethreitz/httpbin
              imagePullPolicy: IfNotPresent
              name: httpbin
              ports:
              - containerPort: 80
    2. HTTPBin uygulamasını foo ad alanına dağıtmak için aşağıdaki komutu çalıştırın:

      kubectl apply -f httpbin.yaml -n foo

Adım 3: Yetkilendirme ilkesi oluşturun

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

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

  3. Create sayfasında parametreleri yapılandırın ve Create öğesini tıklayın.

    Parametre

    Açıklama

    Name

    Yetkilendirme ilkesinin adı.

    Policy Type

    Değeri ALLOW olarak ayarlayın.

    Namespaces

    Workload Scope sekmesinde Namespaces değerini foo olarak ayarlayın.

    Effective Scope

    Service seçeneğini belirleyin.

    Workload

    httpbin seçeneğini belirleyin.

    Request Matching Rules

    1. Add Request Source bölümünde Namespaces anahtarını etkinleştirin ve değeri foo olarak ayarlayın. Bu işlem, foo ad alanındaki tüm uygulamaların httpbin uygulamasına erişmesine olanak tanır.

    2. Add Request Target bölümünde Paths anahtarını etkinleştirin ve değeri /headers olarak ayarlayın. Bu işlem, uygulamaların yalnızca foo ad alanındaki httpbin uygulamasının /headers yoluna erişmesine izin verir.

Adım 4: Belirli bir yola erişimi kontrol eden yetkilendirme ilkesinin etkili olup olmadığını kontrol edin

  1. default ad alanındaki sleep uygulamasını kullanarak foo ad alanındaki HTTPBin uygulamasına bir istek gönderin.

    1. ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters seçeneğini tıklayın.

    2. Clusters sayfasında kümenizin adını tıklayın. Sol gezinme bölmesinde Workloads > Pods seçeneğini tıklayın.

    3. Pods sayfasının üst kısmında Namespaces değerini default olarak ayarlayın. sleep pod'unu bulun ve Actions sütununda Terminal > sleep seçeneğini tıklayın.

    4. sleep kapsayıcısının Terminal bölümünde HTTPBin uygulamasının /headers yoluna erişmek için aşağıdaki komutu çalıştırın:

      curl httpbin.foo.svc.cluster.local:8000/headers

      İstek reddedildiğini belirten 403 kodu döndürülür.

    5. sleep kapsayıcısının Terminal bölümünde HTTPBin uygulamasının /ip yoluna erişmek için aşağıdaki komutu çalıştırın:

      curl httpbin.foo.svc.cluster.local:8000/ip

      İstek reddedildiğini belirten 403 kodu döndürülür.

  2. foo ad alanındaki sleep uygulamasını kullanarak foo ad alanındaki HTTPBin uygulamasına bir istek gönderin.

    1. Küme yönetimi sayfasının sol gezinme bölmesinde Workload > Pods seçeneğini tıklayın.

    2. Pods sayfasının üst kısmında Namespaces değerini foo olarak ayarlayın. sleep pod'unu bulun ve Actions sütununda Terminal > sleep seçeneğini tıklayın.

    3. sleep kapsayıcısının Terminal bölümünde HTTPBin uygulamasının /headers yoluna erişmek için aşağıdaki komutu çalıştırın:

      curl httpbin.foo.svc.cluster.local:8000/headers

      Beklenen çıktı:

      {
        "headers": {
          "Accept": "*/*",
          "Host": "httpbin.foo.svc.cluster.local:8000",
          "User-Agent": "curl/7.82.0-DEV",
          "X-Envoy-Attempt-Count": "1",
          "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/foo/sa/httpbin;Hash=f7ab4985563b5b1986314d5a36c6e46819213e2f38301f534f00afb7cd4b9164;Subject=\"\";URI=spiffe://cluster.local/ns/foo/sa/sleep"
        }
      }
    4. sleep kapsayıcısının Terminal bölümünde HTTPBin uygulamasının /ip yoluna erişmek için aşağıdaki komutu çalıştırın:

      curl httpbin.foo.svc.cluster.local:8000/ip

      İstek reddedildiğini belirten 403 kodu döndürülür.

    Çıktı sonuçları, default ad alanındaki uygulamaların foo ad alanındaki HTTPBin uygulamasının yollarına erişemediğini gösterir. foo ad alanındaki uygulamalar HTTPBin uygulamasının /headers yoluna erişebilir.

Senaryo 2: Bir iş yükünün belirli bir yoluna erişimi ve istek yöntemini kontrol etme

Bu örnekte, foo ad alanı dışındaki ad alanlarında çalışan uygulamaların HTTPBin uygulamasının yalnızca /status yoluna GET istekleriyle erişebileceğini belirten bir yetkilendirme ilkesi oluşturulur. HTTPBin uygulaması foo ad alanında çalışır. HTTPBin uygulamasının diğer yollarına yapılan istekler ve GET dışındaki yöntemlerle yapılan istekler başarısız olur.

Adım 1: default ve foo ad alanları için otomatik sidecar proxy enjeksiyonunu etkinleştirin

  1. default ve foo ad alanlarını oluşturun. Daha fazla bilgi için bkz. Ad alanı oluşturma.

  2. default ve foo ad alanları için otomatik sidecar proxy enjeksiyonunu etkinleştirin. Daha fazla bilgi için bkz. Otomatik sidecar proxy enjeksiyonunu etkinleştirme.

Adım 2: Test uygulamalarını dağıtın

  1. sleep uygulamasını default ve foo ad alanlarına dağıtın.

    1. Aşağıdaki içeriği içeren bir sleep.yaml dosyası oluşturun:

      Show the sleep.yaml file

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "3650d"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. sleep uygulamasını default ad alanına dağıtmak için aşağıdaki komutu çalıştırın:

      kubectl apply -f sleep.yaml -n default
    3. sleep uygulamasını foo ad alanına dağıtmak için aşağıdaki komutu çalıştırın:

      kubectl apply -f sleep.yaml -n foo
  2. HTTPBin uygulamasını foo ad alanına dağıtın.

    1. Aşağıdaki içeriği içeren bir httpbin.yaml dosyası oluşturun:

      Show the httpbin.yaml file

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: httpbin
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: httpbin
        labels:
          app: httpbin
          service: httpbin
      spec:
        ports:
        - name: http
          port: 8000
          targetPort: 80
        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:
            serviceAccountName: httpbin
            containers:
            - image: docker.io/kennethreitz/httpbin
              imagePullPolicy: IfNotPresent
              name: httpbin
              ports:
              - containerPort: 80
    2. HTTPBin uygulamasını foo ad alanına dağıtmak için aşağıdaki komutu çalıştırın:

      kubectl apply -f httpbin.yaml -n foo

Adım 3: Bir yetkilendirme ilkesi 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 Mesh Security Center > AuthorizationPolicy seçeneğini belirleyin. Açılan sayfada Create seçeneğine tıklayın.

  3. Create sayfasında parametreleri yapılandırın ve Create seçeneğine tıklayın.

  4. Parametre

    Açıklama

    Name

    Yetkilendirme ilkesinin adı.

    Policy Type

    ALLOW seçeneğini belirleyin.

    Namespaces

    Workload Scope sekmesinde Namespaces değerini foo olarak ayarlayın.

    Effective Scope

    Service seçeneğini belirleyin.

    Workload

    httpbin seçeneğini belirleyin.

    Request Matching Rules

    Add Request Target bölümünde aşağıdaki parametreleri yapılandırın:

    1. Methods anahtarını etkinleştirin ve değeri GET olarak ayarlayın.

    2. Paths anahtarını açın ve değeri /status/* olarak ayarlayın. Bu yapılandırma, tüm ad alanlardaki uygulamaların foo ad alanındaki httpbin uygulamasının /status yoluna yalnızca GET yöntemiyle erişmesine olanak tanır.

Adım 4: İstek yöntemini ve iş yükünün belirli bir yoluna erişimi kontrol eden yetkilendirme ilkesinin etkili olup olmadığını kontrol edin

  1. ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters seçeneğine tıklayın.

  2. Clusters sayfasında kümenizin adına tıklayın. Sol gezinme bölmesinde Workloads > Pods seçeneğine tıklayın.

  3. Pods sayfasının üst kısmında Namespaces değerini default olarak ayarlayın. sleep pod'unu bulun ve İşlemler sütununda Terminal > sleep seçeneğine tıklayın.

  4. sleep konteynerinin Terminal bölümünde, HTTPBin uygulamasının /status yoluna POST isteğiyle erişmek için aşağıdaki komutu çalıştırın:

    curl -I -X POST "httpbin.foo.svc.cluster.local:8000/status/200" -H "accept: text/plain"

    İstek reddedildiğini belirten 403 kodu döndürülür.

  5. HTTPBin uygulamasının /IP yoluna GET isteğiyle erişmek için aşağıdaki komutu çalıştırın:

    curl -I -X GET "httpbin.foo.svc.cluster.local:8000/IP/200" -H "accept: text/plain"

    İstek reddedildiğini belirten 403 kodu döndürülür.

  6. HTTPBin uygulamasının /status yoluna GET isteğiyle erişmek için aşağıdaki komutu çalıştırın:

    curl -I -X GET "httpbin.foo.svc.cluster.local:8000/status/200" -H "accept: text/plain"

    Beklenen çıktı:

    HTTP/1.1 200 OK
    server: envoy
    date: Fri, 29 Apr 2022 03:01:16 GMT
    content-type: text/html; charset=utf-8
    access-control-allow-origin: *
    access-control-allow-credentials: true
    content-length: 0
    x-envoy-upstream-service-time: 5

    Sonuç, default ad alanındaki uygulamaların HTTPBin uygulamasının /status yoluna yalnızca GET istekleriyle erişebildiğini gösterir. Bu durum, yetkilendirme ilkesinin etkili olduğunu doğrular.

Örnek 3: İstemci IP adreslerine göre bir iş yüküne erişimi denetleme

Yalnızca yetkili istemci IP adreslerinden gelen isteklerin foo ad alanındaki HTTPBin uygulamasına erişmesine izin veren bir yetkilendirme ilkesi oluşturabilirsiniz.

1. Adım: foo ad alanı için otomatik yan vekil proxy enjeksiyonunu etkinleştirin

  1. foo ad alanını oluşturun. Daha fazla bilgi için bkz. Küresel ad alanlarını yönetme.

  2. foo ad alanı için otomatik yan vekil proxy enjeksiyonunu etkinleştirin. Daha fazla bilgi için bkz. Otomatik yan vekil proxy enjeksiyonunu etkinleştirme.

2. Adım: Bir giriş ağ geçidi dağıtın

  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 > Ingress Gateway seçeneğini belirleyin.

  3. Ingress Gateway sayfasında Create öğesini tıklayın, parametreleri yapılandırın ve ardından Create düğmesini tıklayın.

    Parametre

    Açıklama

    Name

    Giriş ağ geçidinin adı.

    Cluster

    Giriş ağ geçidini dağıtmak istediğiniz küme.

    SLB

    Classic Load Balancer ve Public Access seçeneklerini seçin. Bu örnekte Classic Load Balancer kullanılmıştır ancak Network Load Balancer da kullanabilirsiniz.

    Create SLB Instance

    Kullanmak istediğiniz yük dengeleyici örneği. Aşağıdaki yöntemlerden birini kullanarak bir yük dengeleyici örneği seçebilirsiniz:

    • Use Existing CLB Instance: Listeden mevcut bir yük dengeleyici seçin.

    • Create SLB Instance: Create SLB Instance öğesini tıklayın ve açılan listeden istediğiniz teknik özellikleri seçin.

    Port Mapping

    İhtiyaçlarınıza göre bir Protocol seçin ve bir Service Port girin.

    External Traffic Policy

    Advanced Options öğesini tıklayın ve External Traffic Policy değerini Local olarak ayarlayın.

3. Adım: Bir sanal hizmet ve bir Istio ağ geçidi oluşturun

  1. Aşağıdaki içeriği kullanarak foo ad alanında bir sanal hizmet oluşturun. Daha fazla bilgi için bkz. Sanal hizmetleri yönetme.

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: httpbin
    spec:
      gateways:
        - httpbin-gateway
      hosts:
        - '*'
      http:
        - match:
            - uri:
                prefix: /headers
          route:
            - destination:
                host: httpbin
                port:
                  number: 8000
  2. Aşağıdaki içeriği kullanarak foo ad alanında bir Istio ağ geçidi oluşturun. Daha fazla bilgi için bkz. Istio ağ geçitlerini yönetme.

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: httpbin-gateway
    spec:
      selector:
        istio: ingressgateway
      servers:
        - hosts:
            - '*'
          port:
            name: http
            number: 80
            protocol: HTTP

4. Adım: Bir yetkilendirme ilkesi oluşturun

  1. Giriş ağ geçidinin IP adresini edinin. Daha fazla bilgi için bkz. Giriş ağ geçidi oluşturma.

  2. İstemcinin IP adresini edinin.

    Tarayıcınızın adres çubuğuna http://{ASM Ağ Geçidi IP}/headers yazarak X-Envoy-External-Address için IP adresini edinin. Dönen yanıtta X-Envoy-External-Address alanı, istemcinin gerçek harici IP adresidir.

    {
      "headers": {
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,imag...",
        "Accept-Encoding": "gzip, deflate",
        "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
        "Cache-Control": "max-age=0",
        "Host": "<IP address>",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.3...",
        "X-Envoy-Attempt-Count": "1",
        "X-Envoy-External-Address": "<Client external IP>",
        "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/foo/sa/httpbin;Hash=e49...service-account"
      }
    }
  3. Bir yetkilendirme ilkesi 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 Mesh Security Center > AuthorizationPolicy seçeneğini belirleyin. Görüntülenen sayfada Create öğesini tıklayın.

    3. Create sayfasında parametreleri yapılandırın ve Create düğmesini tıklayın.


      Parametre


      Açıklama


      Name


      Yetkilendirme ilkesinin adı.


      Policy Type


      DENY seçeneğini belirleyin.


      Namespaces


      Workload Scope sekmesinde Namespaces değerini foo olarak ayarlayın.


      Effective Scope


      Service seçeneğini belirleyin.


      Workload


      httpbin seçeneğini belirleyin.


      Request Matching Rules


      Add Request Source bölümünde RemoteIPBlocks anahtarını etkinleştirin ve değeri, önceki adımda edindiğiniz istemci IP adresine ayarlayın. Bu işlem, istemci IP adresinin httpbin uygulamasına erişmesini engeller.

5. Adım: Belirtilen istemci IP adresinden gönderilen istekleri reddeden yetkilendirme ilkesinin etkili olup olmadığını kontrol edin

Tarayıcınızda http://{ASM gateway IP}/headers adresine gidin. RBAC: access denied iletisi döndürülür; bu durum, httpbin uygulamasına erişimin başarısız olduğunu gösterir. Bu sonuç, istemci IP adresi kısıtlamasının yürürlükte olduğunu doğrular.

RBAC: access denied

Örnek 4: Ad alanları arasında hizmet erişimini denetleme

1. Adım: demo-frontend ve demo-server ad alanları için otomatik yan vekil proxy enjeksiyonunu etkinleştirin

  1. demo-frontend ve demo-server ad alanlarını oluşturun. Daha fazla bilgi için bkz. Ad alanı oluşturma.

  2. demo-frontend ve demo-server ad alanları için otomatik yan vekil proxy enjeksiyonunu etkinleştirin. Daha fazla bilgi için Küresel ad alanlarını yönetme konusunun "Otomatik yan vekil proxy enjeksiyonunu etkinleştirme" bölümüne bakın.

2. Adım: Test hizmetlerini dağıtın

demo-frontend ad alanında sleep adlı bir hizmet ve demo-server ad alanında httpbin adlı bir hizmet oluşturun. Sleep hizmeti, httpbin hizmetine erişim isteği göndermek için kullanılır.

  1. demo-frontend ad alanında sleep adlı bir hizmet oluşturun.

    1. Aşağıdaki içeriği içeren bir sleep.yaml dosyası oluşturun:

      Sleep.yaml dosyasını göster

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "3650d"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. kubeconfig dosyasındaki bilgileri kullanarak Container Service for Kubernetes (ACK) kümesine kubectl ile bağlanın ve ardından sleep hizmetini oluşturmak için aşağıdaki komutu çalıştırın:

      kubectl apply -f sleep.yaml -n demo-frontend
  2. demo-server ad alanında httpbin adlı bir hizmet oluşturun.

    1. Aşağıdaki içeriği içeren bir httpbin.yaml dosyası oluşturun:

      Httpbin.yaml dosyasını göster

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: httpbin
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: httpbin
        labels:
          app: httpbin
          service: httpbin
      spec:
        ports:
        - name: http
          port: 8000
          targetPort: 80
        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:
            serviceAccountName: httpbin
            containers:
            - image: docker.io/kennethreitz/httpbin
              imagePullPolicy: IfNotPresent
              name: httpbin
              ports:
              - containerPort: 80
    2. kubeconfig dosyasındaki bilgilere göre ACK kümesine kubectl ile bağlanın ve httpbin hizmetini oluşturmak için aşağıdaki komutu çalıştırın:

      kubectl apply -f httpbin.yaml -n demo-server
  3. sleep ve httpbin hizmetlerinin barındığı pod'lara sidecar proxy'lerin enjekte edildiğini doğrulayın.

    1. ACK konsolu oturumunu açın. Sol gezinme bölmesinde Clusters seçeneğine tıklayın.

    2. Clusters sayfasında kümenizin adına tıklayın. Sol gezinme bölmesinde Workloads > Pods seçeneklerine tıklayın.

    3. Pods sayfasının üst kısmında Namespaces açılır listesinden demo-frontend öğesini seçin ve sleep hizmetinin pod adına tıklayın.

      Containers sekmesinde istio-proxy konteynerini görebilirsiniz. Bu durum, sleep hizmeti için sidecar enjeksiyonunun tamamlandığını gösterir.

    4. Pods sayfasının üst kısmında Namespaces açılır listesinden demo-server öğesini seçin ve httpbin hizmetinin pod adına tıklayın.

      Containers sekmesinde istio-proxy konteynerini görebilirsiniz. Bu durum, httpbin hizmeti için sidecar enjeksiyonunun tamamlandığını gösterir.

3. Adım: Ad alanları arasında hizmet erişimini kontrol etmek için bir yetkilendirme ilkesi oluşturma

Bir yetkilendirme ilkesi oluşturabilir ve bu ilkedeki action parametresini değiştirerek demo-frontend ad alanındaki hizmetlerden demo-server ad alanındaki hizmetlere yönelik erişim isteklerini reddedebilir veya izin verebilirsiniz. Bu sayede ad alanları arasındaki hizmet erişimini kontrol edebilirsiniz.

  1. demo-frontend ad alanından demo-server ad alanına yapılan erişim isteklerini reddeden bir yetkilendirme ilkesi oluşturun.

    1. ASM konsolu oturumunu açın. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneklerini seçin.

    2. Mesh Management sayfasında ASM örneğinin adına tıklayın. Sol gezinme bölmesinde Mesh Security Center > AuthorizationPolicy seçeneklerini seçin. Açılan sayfada Create seçeneğine tıklayın.

    3. Yetkilendirme ilkesi parametrelerini yapılandırın ve Create seçeneğine tıklayın.


      Parametre


      Açıklama


      Name


      Yetkilendirme ilkesinin adı.


      Policy Type


      DENY seçeneğini belirleyin.


      Namespaces

      Workload Scope sekmesinde Namespaces değerini demo-server olarak ayarlayın.


      Effective Scope


      Namespace Scope seçeneğini belirleyin.


      Request Matching Rules

      Add Request Source bölümünde Namespaces anahtarını etkinleştirin ve değeri demo-frontend olarak ayarlayın.

  2. httpbin hizmetine erişin.

    1. ACK konsolu oturumunu açın. Sol gezinme bölmesinde Clusters seçeneğine tıklayın.

    2. Clusters sayfasında kümenizin adına tıklayın. Sol gezinme bölmesinde Workloads > Pods seçeneklerine tıklayın.

    3. Pods sayfasının üst kısmında Namespaces açılır listesinden demo-frontend öğesini seçin. Ardından sleep pod'unu bulun ve Actions sütununda Terminal > sleep seçeneklerine tıklayın.

    4. httpbin hizmetine erişmek için sleep konteynerinin terminalinde aşağıdaki komutu çalıştırın:

      curl -I httpbin.demo-server.svc.cluster.local:8000

      Beklenen çıktı:

      HTTP/1.1 403 Forbidden
      content-length: 19
      content-type: text/plain
      date: Wed, 11 Oct 2023 08:15:25 GMT
      server: envoy
      x-envoy-upstream-service-time: 4

      Yukarıdaki çıktı, demo-frontend ad alanındaki hizmetlerin demo-server ad alanındaki hizmetlere erişemediğini gösterir.

  3. demo-frontend ad alanından demo-server ad alanına yapılan erişim isteklerine izin vermek için yetkilendirme ilkesindeki action parametresinin değerini ALLOW olarak değiştirin.

    1. ASM konsolu oturumunu açın. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneklerini seçin.

    2. Mesh Management sayfasında ASM örneğinin adına tıklayın. Sol gezinme bölmesinde Mesh Security Center > AuthorizationPolicy seçeneklerini seçin.

    3. AuthorizationPolicy sayfasında hedef ilkeyi bulun ve Actions sütununda View YAML seçeneğine tıklayın.

    4. Edit iletişim kutusunda action parametresinin değerini ALLOW olarak değiştirin ve OK seçeneğine tıklayın.

  4. httpbin hizmetine erişmek için sleep konteynerinin terminalinde aşağıdaki komutu çalıştırın:

    curl -I httpbin.demo-server.svc.cluster.local:8000

    Beklenen çıktı:

    HTTP/1.1 200 OK
    server: envoy
    date: Wed, 11 Oct 2023 08:21:40 GMT
    content-type: text/html; charset=utf-8
    content-length: 9593
    access-control-allow-origin: *
    access-control-allow-credentials: true
    x-envoy-upstream-service-time: 13

    Yukarıdaki çıktı, demo-frontend ad alanındaki hizmetlerin demo-server ad alanındaki hizmetlere başarıyla eriştiğini gösterir.

    Gördüğünüz gibi, Action değeri Deny olarak ayarlanmış bir yetkilendirme ilkesi oluşturulduktan sonra demo-frontend ad alanındaki hizmetler demo-server ad alanındaki hizmetlere erişemez. Yetkilendirme ilkesinin Action değeri ALLOW olarak değiştirildiğinde ise demo-frontend ad alanındaki hizmetler demo-server ad alanındaki hizmetlere başarıyla erişebilir. Bu durum, yetkilendirme ilkesinin ad alanları arası hizmet erişimini başarıyla kontrol ettiğini gösterir.