从nginx ingress迁移到istio

时间:2018-05-15 11:11:41

标签: kubernetes istio kubernetes-ingress

我有简单的单页golang web应用程序,我正在尝试迁移到istio。

我的prod设置(通过nginx入口):

const walletOne = accounts[1];

return deployer
    .then(() => {
        return deployer.deploy(MySuperCoin);
    })
    .then(() => {
        return deployer.deploy(
            MySuperCoinPresaleOne,
            openingTimeOne,
            closingTimeOne,
            rateOne,
            walletOne,
            capOne,
            MySuperCoin.address
        );
    });

我正在尝试为istio构建至少http配置

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: goapp
  annotations:
     kubernetes.io/ingress.class: nginx
     kubernetes.io/tls-acme: "true"
spec:
  tls:
  - hosts:
    - mycustomapp.mycustomapp.com
    secretName: go-tls
  rules:
  - host: mycustomapp.mycustomapp.com
    http:
      paths:
      - path: /
        backend:
          serviceName: mycustomapp
          servicePort: 80

但是我总是通过istio lb在istio lb上获得404,只安装了istio 0.7.1。像bookinfo和httpbin这样的样本效果很好

申请表:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: goapp
      annotations:
         kubernetes.io/ingress.class: istio
    spec:
      rules:
      - host: mycustomapp.mycustomapp.com
        http:
          paths:
          - path: /
            backend:
              serviceName: mycustomapp
              servicePort: 80

1 个答案:

答案 0 :(得分:0)

要消除您的情况下的404错误,应该足以将正确的端口名称添加到服务和部署YAML文件,并将istio sidecar添加到部署YAML文件。然后,您应该重新部署所有已更改的文件。

也许您可能需要在服务和部署中添加标签app: mycustomapp,但我不确定它是必需的还是可选的。

以下是具有正确端口名称的service.yaml文件示例(有关您可以阅读的端口名称here的更多信息):

kind: Service
apiVersion: v1
metadata:
  annotations:
    prometheus.io/scrape: 'true'
  labels:
    app: mycustomapp
    k8s-app: mycustomapp
  name: mycustomapp
spec:
  type: ClusterIP
  ports:
    - name: http-80
      port: 80
      targetPort: 80
  selector:
    k8s-app: mycustomapp

确保部署文件中还有正确的端口名称。

您可以按照以下步骤手动将istio sidecar添加到容器中:

  1. https://github.com/istio/istio/releases
  2. 下载并解压缩适用于您的操作系统的最新版本
  3. 将目录更改为istio包。例如,如果包是istio-0.7

    cd istio-0.7

  4. 创建注入配置:

    kubectl create -f install/kubernetes/istio-sidecar-injector-configmap-release.yaml --dry-run -o=jsonpath='{.data.config}' > inject-config.yaml

  5. 创建网格配置:

    kubectl -n istio-system get configmap istio -o=jsonpath='{.data.mesh}' > mesh-config.yaml

  6. 将istio sidecar容器添加到您的部署中:

    bin/istioctl kube-inject \ --injectConfigFile inject-config.yaml \ --meshConfigFile mesh-config.yaml \ --filename path/to/original/deployment.yaml \ --output deployment-injected.yaml

  7. 部署新部署: kubectl apply -f deployment -jected.yaml

  8. 如果您想进行自动边车注射,请按照this手册进行操作。

    您可以检查边车是否已注入部署中:

    $ kubectl get deployment mycustomapp -o wide
    NAME          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE       CONTAINERS                IMAGES                                    SELECTOR
    mycustomapp   1         1         1            1           3h        mycustomapp,istio-proxy   nginx:1.7.9,docker.io/istio/proxy:0.7.1   k8s-app=mycustomapp