istio 예제

푸르둥개·2025년 11월 18일

istio.yaml

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: example-service-gateway
  labels:
    name: example-service
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: example-service-nginx
  labels:
    name: example-service-nginx
spec:
  hosts:
  - "*"
  gateways:
  - example-service-gateway
  http:
  - match:
    - uri:
        prefix: "/example"
    route:
    - destination:
        host: example-service-nginx
        port:
          number: 80
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: example-service
spec:
  hosts:
  - example-service
  tcp:
  - match:
    - port: 9000
    route:
    - destination:
        host: example-service
        subset: release
      weight: 90
    - destination:
        host: example-service
        subset: canary
      weight: 10
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: example-service
spec:
  host: example-service
  subsets:
  - name: release
    labels:
      track: release
  - name: canary
    labels:
      track: canary

ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: istio-nginx-examle-lb
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/proxy-body-size: 0m
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-request-buffering: "off"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "300"

spec:
  rules:
  - host: istio-test.mydomain.com
    http:
      paths:
      - backend:
          serviceName: example-service-nginx
          servicePort: 80
  tls:
  - hosts:
    - istio-test.mydomain.com
    secretName: mydomain-com

deployment.yaml

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: example-service-v1
  labels:
    name: example-service
    instance: testing
    track: release
    version: 1.0.0
spec:
  selector:
    matchLabels:
      name: example-service
      instance: testing
      track: release
      version: 1.0.0
  template:
    metadata:
      annotations:
        sidecar.istio.io/inject: "true"
      labels:
        name: example-service
        instance: testing
        track: release
        version: 1.0.0
    spec:
      containers:
      - name: example-service
        image: darrencraig/example-php-service:v1
        imagePullPolicy: Always
        ports:
        - containerPort: 9000
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: example-service-v2
  labels:
    name: example-service
    instance: testing
    track: canary
    version: 2.0.0
spec:
  selector:
    matchLabels:
      name: example-service
      instance: testing
      track: canary
      version: 2.0.0
  template:
    metadata:
      annotations:
        sidecar.istio.io/inject: "true"
      labels:
        name: example-service
        instance: testing
        track: canary
        version: 2.0.0
    spec:
      containers:
      - name: example-service
        image: darrencraig/example-php-service:v2
        imagePullPolicy: Always
        ports:
        - containerPort: 9000
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: example-service-nginx
  labels:
    name: example-service-nginx
    instance: testing
spec:
  selector:
    matchLabels:
      name: example-service-nginx
      instance: testing
  template:
    metadata:
      labels:
        name: example-service-nginx
        instance: testing
    spec:
      containers:
      - name: example-service-nginx
        image: darrencraig/laravel-nginx:latest
        imagePullPolicy: Always
        env:
        - name: LARAVEL_UPSTREAM
          value: example-service
        ports:
        - name: http
          containerPort: 80
          protocol: TCP
        volumeMounts:
        - mountPath: /etc/nginx/conf.d
          name: example-service-nginx
        resources:
      volumes:
      - name: example-service-nginx
        configMap:
          name: example-service-nginx
          items:
          - key: nginx
            path: default.conf

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: example-service-nginx
  labels:
    name: example-service-nginx
spec:
  type: ClusterIP
  ports:
  - name: http-nginx
    port: 80
  selector:
    name: example-service-nginx
---
apiVersion: v1
kind: Service
metadata:
  name: example-service
  labels:
    name: example-service
spec:
  type: ClusterIP
  ports:
    - protocol: TCP
      port: 9000
  selector:
    name: example-service

configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: example-service-nginx
  labels:
    name: example-service-nginx
data:
  nginx: |
    server {
        listen 80;
        root /var/www/public;
        index index.php index.html index.htm;
        location = /favicon.ico { access_log off; log_not_found off; }
        location = /robots.txt  { access_log off; log_not_found off; }
        location / {
            try_files $uri $uri/ /index.php$query_string;
        }
        location ~ \.php$ {
            # try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_read_timeout 1000;
            fastcgi_pass example-service:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
        location ~ /\.ht {
            deny all;
        }
    }
profile
DevOps, 개발팀과 운영팀이 알아두면 좋은 정보를 공유합니다.

0개의 댓글